簡體   English   中英

如何列出指向golang結構所有字段的指針?

[英]How to list pointers to all fields of golang struct?

golang 中是否有傳遞某個 struct 實例c所有字段的好方法?

我正在尋找一些語法糖功能,而不是這樣做:

method(&c.field1, &c.field2, &c.field3, &c.field4, &c.field5, ...)

我可以這樣做:

method(FieldsPointers(c)...)

我對 golang 還是比較陌生,並且仍在學習基礎知識,如果沒有好的方法可以做我想做的事情有充分的理由,我希望能解釋一下原因。

除了所有 sql 指定的工具,如果你想訪問一個結構體的指針,你可以使用reflect 請注意,包裹很棘手,rob pike 說它並不適合所有人。

reflect.Value有方法NumField返回結構中的字段數和Field(int) ,它接受字段的索引並返回字段本身。

但是當你想給它設置一個值時,它比僅僅調用這兩個方法要復雜得多。 讓我用代碼告訴你:

func Scan(x interface{}) {
    v := reflect.ValueOf(x).Elem()
    for i := 0; i < v.NumField(); i++ {
        switch f := v.Field(i); f.Kind() {
        case reflect.Int:
            nv := 37
            f.Set(reflect.ValueOf(nv))
        case reflect.Bool:
            nv := true
            f.Set(reflect.ValueOf(nv))
        }
    }
}

首先,您需要將結構的指針傳遞給Scan ,因為您正在修改數據並且該值必須是可設置的。 這就是為什么我們調用.Elem()來取消對指針的引用。

其次, reflect.Value.Set必須使用相同的類型來設置。 您不能像正常賦值那樣將uint32設置為int64

游樂場: https : //play.golang.org/p/grvXAc1Px8g

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM