亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

golang 結(jié)構(gòu)體初始化時賦值格式介紹

 更新時間:2020年12月19日 11:12:21   作者:robin912  
這篇文章主要介紹了golang 結(jié)構(gòu)體初始化時賦值格式介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

golang在給結(jié)構(gòu)體賦值初始值時,用:分割k,v值

  x := ItemLog{
    Id:   GetUuid(),
    ItemId: u.Id,
    UsrId:  "123",
    Name:  u.Name,
    Price:  u.Price,
    Desc:  u.Desc,
    Status: u.Status,
    DevArea: u.DevArea,
  }

補充:golang 結(jié)構(gòu)體作為map的元素時,不能夠直接賦值給結(jié)構(gòu)體的某個字段

引入: 錯誤 Reports assignments directly to a struct field of a map

1. 問題的產(chǎn)生

這個問題在github上可以追溯到2012年提交的一個issue,鏈接為https://github.com/golang/go/issues/3117;如上圖,結(jié)構(gòu)體作為map的元素時,不能夠直接賦值給結(jié)構(gòu)體的某個字段,也就是map中的struct中的字段不能夠直接尋址。

2. 問題產(chǎn)生的原因

關(guān)于golang中map的這種古怪的特性有這樣幾個觀點:

1)map作為一個封裝好的數(shù)據(jù)結(jié)構(gòu),由于它底層可能會由于數(shù)據(jù)擴張而進行遷移,所以拒絕直接尋址,避免產(chǎn)生野指針;

2)map中的key在不存在的時候,賦值語句其實會進行新的k-v值的插入,所以拒絕直接尋址結(jié)構(gòu)體內(nèi)的字段,以防結(jié)構(gòu)體不存在的時候可能造成的錯誤;

3)這可能和map的并發(fā)不安全性相關(guān)

3. 問題的解決

1)迂回方式一:整體更新map的value部分

package main 
import "fmt" 
type Person struct{
 name string
 sex string
 age int
}
 
func main(){
 m := map[uint]Person{
 0 : Person{"張無忌", "男", 18},
 1 : Person{"周芷若", "女", 17},
 }
 
 //m[0].age += 1
 //整體更新結(jié)構(gòu)體
 temp := m[0]
 temp.age += 1
 m[0] = temp
 fmt.Println(m)
}

運行結(jié)果:

2) 迂回方式二:把map的value部分定義為對應(yīng)類型的指針類型或是slice或是map時,這樣是可以更新v的內(nèi)部字段的

package main 
import "fmt" 
type Person struct{
 name string
 sex string
 age int
}
 
func main() {
 //定義map的value類型為指針類型
 m := map[uint]*Person{
 0: &Person{"張無忌", "男", 18},
 1: &Person{"周芷若", "女", 17},
 } 
 m[0].age += 1 
 fmt.Println(*m[0])
}

運行結(jié)果:

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • 一文搞懂Golang?值傳遞還是引用傳遞

    一文搞懂Golang?值傳遞還是引用傳遞

    最多人犯迷糊的就是?slice、map、chan?等類型,都會認為是?“引用傳遞”,從而認為?Go?語言的?xxx?就是引用傳遞。正因為它們還引用類型(指針、map、slice、chan等這些),這樣就可以修改原內(nèi)容數(shù)據(jù),這篇文章主要介紹了Golang?值傳遞還是引用傳遞,需要的朋友可以參考下
    2023-01-01
  • Golang構(gòu)建WebSocket服務(wù)器和客戶端的示例詳解

    Golang構(gòu)建WebSocket服務(wù)器和客戶端的示例詳解

    這篇文章主要為大家詳細介紹了如何使用Go語言構(gòu)建WebSocket服務(wù)器和客戶端,以實現(xiàn)雙向通信,文中的示例代碼講解詳細,需要的小伙伴可以參考一下
    2023-11-11
  • 淺析Go語言中的棧和先進先出原則

    淺析Go語言中的棧和先進先出原則

    這篇文章主要來和大家探討一樣如何在Go語言中實現(xiàn)和使用堆棧,以及堆棧如何遵循先進先出 (FIFO) 原則,文中的示例代碼簡潔易懂,需要的可以參考一下
    2023-07-07
  • Go語言單元測試的實現(xiàn)及用例

    Go語言單元測試的實現(xiàn)及用例

    在日常開發(fā)中,我們通常需要針對現(xiàn)有的功能進行單元測試,以驗證開發(fā)的正確性,本文主要介紹了Go語言單元測試的實現(xiàn)及用例,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Golang Map value不可尋址使用指針類型代替示例詳解

    Golang Map value不可尋址使用指針類型代替示例詳解

    這篇文章主要為大家介紹了Golang Map value不可尋址使用指針類型代替示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • Go gorilla securecookie庫的安裝使用詳解

    Go gorilla securecookie庫的安裝使用詳解

    這篇文章主要介紹了Go gorilla securecookie庫的安裝使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Go實現(xiàn)快速生成固定長度的隨機字符串

    Go實現(xiàn)快速生成固定長度的隨機字符串

    這篇文章主要為大家詳細介紹了怎樣在Go中簡單快速地生成固定長度的隨機字符串,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以學(xué)習(xí)一下
    2022-10-10
  • 在Colaboratory上運行Go程序的詳細過程

    在Colaboratory上運行Go程序的詳細過程

    這篇文章主要介紹了在Colaboratory上運行Go程序,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Golang服務(wù)中context超時處理的方法詳解

    Golang服務(wù)中context超時處理的方法詳解

    在Go語言中,Context是一個非常重要的概念,它存在于一個完整的業(yè)務(wù)生命周期內(nèi),Context類型是一個接口類型,在實際應(yīng)用中,我們可以使用Context包來傳遞請求的元數(shù)據(jù),本文將給大家介紹Golang服務(wù)中context超時處理的方法和超時原因,需要的朋友可以參考下
    2023-05-05
  • Go REFLECT Library反射類型詳解

    Go REFLECT Library反射類型詳解

    這篇文章主要為大家介紹了Go REFLECT Library反射類型詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08

最新評論