golang 結構體初始化時賦值格式介紹

2022-09-22 01:00:13 字數 1087 閱讀 1633

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語言中引用變數的基本原則是在使用變數前,需要對變數進行定義並初始化。其方法是在定義變數的同時給其一初始值。結構體變數的初始化,遵循相同的規律。簡單變數的初始化形式如下 資料...