1 回答

TA貢獻1772條經(jīng)驗 獲得超5個贊
沒有內(nèi)置方法/函數(shù)可以執(zhí)行此操作。中的現(xiàn)有FieldBy*方法reflect是作為循環(huán)實現(xiàn)的(參見`src/reflect/type.go)。您還可以編寫一個循環(huán)來實現(xiàn)此處所需的功能。一種方法可能是這樣的:
func fieldByTag(s interface{}, tagKey, tagValue string) (reflect.StructField, bool) {
rt := reflect.TypeOf(s)
for i := 0; i < rt.NumField(); i++ {
field := rt.Field(i)
if field.Tag.Get(tagKey) == tagValue {
return field, true
}
}
return reflect.StructField{}, false
}
請注意,tagKey和tagValue是單獨傳遞的,因為這就是reflect.StructField工作原理。所以在你的情況下你會這樣稱呼它:
field, ok := fieldByTag(&ns, "json", "name")
- 1 回答
- 0 關(guān)注
- 133 瀏覽
添加回答
舉報