php小編草莓為您介紹如何訪問結構體的指針切片字段內的嵌入結構體。在Go語言中,我們可以使用指針切片來存儲結構體數據,并且在結構體中嵌入其他結構體作為字段。然而,訪問嵌入結構體字段需要一些特殊的操作。本文將詳細解釋如何通過指針切片來訪問這些嵌入結構體字段,幫助您更好地理解和應用這一特性。無論您是初學者還是有經驗的Go開發者,本文都將為您提供實用的技巧和示例代碼,助您輕松掌握這一知識點。
問題內容
我想添加功能以在數據為 []*struct
時獲取第一個元素。
func getencfields(t reflect.type, list map[string]int) { for t.kind() == reflect.ptr { t = t.elem() } if t.kind() == reflect.struct { for i := 0; i < t.numfield(); i++ { field := t.field(i) tag := field.tag.get("bson") if containstag(tag, "encr") { list[getfieldname(field, tag)]++ } getencfields(field.type, list) } }
登錄后復制
在此代碼中,當數據為 []*struct
時,我需要添加功能。這是要在此函數中傳遞的結構類型。
type Customer struct { Name string `json:"name" bson:"name"` Acnumber int64 `json:"acnumber" bson:"acnumber,encr"` Number int64 `json:"number" bson:"number,encr"` Address []*Address `json:"address" bson:"address"` } type Address struct { Mail string `json:"mail" bson:"mail,encr"` }
登錄后復制
感謝您的支持
解決方法
像處理指針一樣向下鉆取數組、切片和映射。
func getEncFields(t reflect.Type, list map[string]int) { for t.Kind() == reflect.Ptr || t.Kind() == reflect.Slice || t.Kind() == reflect.Array || t.Kind() == reflect.Map { t = t.Elem() } if t.Kind() == reflect.Struct { for i := 0; i < t.NumField(); i++ { field := t.Field(i) tag := field.Tag.Get("bson") if containsTag(tag, "encr") { list[getFieldName(field, tag)]++ } getEncFields(field.Type, list) } } }
登錄后復制
https://www.php.cn/link/b4572f47b7c69e27b8e46646d9579e67 p>