我正在嘗試使用 golang 中的反射從結(jié)構(gòu)中讀取,我能夠成功地做到這一點,但我想知道我該怎么做才能忽略字段名稱的大小寫。我有以下代碼type App struct{ AppID string Owner string DisplayName string}func Extract(app *App){appData := reflect.ValueOf(app)appid := reflect.Indirect(appData).FieldByName("appid")fmt.Println(appid.String())owner:=reflect.Indirect(appData).FieldByName("owner")fmt.Println(owner.String())}<invalid-value>由于字段名稱的小寫,上面的函數(shù)返回了 both 和 its有什么辦法可以忽略這個案例嗎?
1 回答

MMMHUHU
TA貢獻1834條經(jīng)驗 獲得超8個贊
使用Value.FieldByNameFunc和strings.ToLower在查找字段時忽略大小寫:
func caseInsenstiveFieldByName(v reflect.Value, name string) reflect.Value {
? ? name = strings.ToLower(name)
? ? return v.FieldByNameFunc(func(n string) bool { return strings.ToLower(n) == name })
}
像這樣使用它:
func Extract(app *App) {
? ? appData := reflect.ValueOf(app)
? ? appid := caseInsenstiveFieldByName(reflect.Indirect(appData), "appid")
? ? fmt.Println(appid.String())
? ? owner := caseInsenstiveFieldByName(reflect.Indirect(appData), "owner")
? ? fmt.Println(owner.String())
}
- 1 回答
- 0 關(guān)注
- 231 瀏覽
添加回答
舉報
0/150
提交
取消