golang在給結構體賦值初始值時,用:分割k,v值
x := itemlog
補充:golang 結構體作為map的元素時,不能夠直接賦值給結構體的某個字段
引入: 錯誤 reports assignments directly to a struct field of a map
這個問題在githublrawod上可以追溯到2023年提交的乙個issue,鏈結為如上圖,結構體作為map的元素時,不能夠直接賦值給結構體的某個字段,也就是map中的struct中的字段不能夠直接定址。
關於golang中map的這種古怪的特性有這樣幾個觀點:
1)map作為乙個封裝好的資料結構,由於它底層可能會由於資料擴張而進行遷移,所以拒絕直接定址,避免產生野指標;
2)map中的key在不存在的時候,賦值語句其實會進行新的k-v值的插入,所以拒絕直接定址結構體內的字段,以防結構體不存在的時候可能造成的錯誤;
3)這可能和m程式設計客棧ap的併發不安全性相關
1)迂程式設計客棧回方式一:整體更新map的value部分
package main
import "fmt"
type person struct
func main(),
1 : person, }
//m[0].age += 1
//整體更新結構體
temp := m[0]
temp.age += 1
m[0] = temp
fmt.println(m)
}執行結果:
2) 迂迴方式二:把map的value部分定義為對應型別的指標型別或是slice或是map時,這樣是可以更新v的內部欄位的
package main
import "fmt"
type person struct
func main() ,
1: &person,
} m[0].age += 1
fmt.println(*m[0])
}執行結果:
本文標題: golang 結構體初始化時賦值格式介紹
本文位址: /jiaoben/golang/370322.html
Golang優雅初始化結構體
所謂優雅,即能夠讓擴充套件性更好,便於在後期擴充套件的時候,減少開發時間,以及更加易於新增功能。具體的實現,就是一次對於閉包的靈活使用 閱go micro 從示例 main.go service.go options.go的實現來說明。main.go package main func main s...
(C C 基礎)結構體 初始化 賦值 定義
首先介紹一下初始化 賦值 定義 宣告這四個概念。初始化 建立變數並給它賦初值。初始化和賦初值不同。初始化 帶指定初始值的定義。乙個程式中,乙個變數只能初始化一次。如 int i 0 賦值 擦除物件的當前值並用新值替代,在乙個程式中,乙個變數可以多次賦值。定義 用來為變數分配記憶體空間,還可以為變數指...
結構體初始化
結構體變數初始化 tag 結構體,結構體變數,結構體變數宣告,結構體變數初始化,結構體變數引用,結構體成員變數引用 text c語言中引用變數的基本原則是在使用變數前,需要對變數進行定義並初始化。其方法是在定義變數的同時給其一初始值。結構體變數的初始化,遵循相同的規律。簡單變數的初始化形式如下 資料...