首頁  >  文章  >  後端開發  >  如何存取結構體的指標切片欄位內的嵌入結構體

如何存取結構體的指標切片欄位內的嵌入結構體

WBOY
WBOY轉載
2024-02-09 08:27:51335瀏覽

如何存取結構體的指標切片欄位內的嵌入結構體

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>

以上是如何存取結構體的指標切片欄位內的嵌入結構體的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除