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) } } }
//m.sbmmt.com/link/b4572f47b7c69e27b8e46646d9579e67 p>
以上是如何存取結構體的指標切片欄位內的嵌入結構體的詳細內容。更多資訊請關注PHP中文網其他相關文章!