1 回答

TA貢獻1826條經驗 獲得超6個贊
您可以使用relfect來做到這一點。有一個寫得很好的教程,你可以看看。
根據你給的結構,我寫了一個demo。主要思想是通過名稱找到結構體,然后迭代切片,在結構體中找到名稱。
p.stringifyPokemon("Types")您可以使用or p.stringifyPokemon("Abilities")now得到答案。
func (p Pokemon) stringifyPokemon(field string) string {
value := reflect.ValueOf(p)
struct1 := value.FieldByName(field)
if !struct1.IsValid() {
return ""
}
if struct1.Type().Kind() != reflect.Slice {
return ""
}
ans := make([]string, 0)
for i := 0; i < struct1.Len(); i++ {
slice1 := struct1.Index(i)
if slice1.Type().Kind() != reflect.Struct {
continue
}
for j := 0; j < slice1.NumField(); j++ {
struct2 := slice1.Field(j)
if struct2.Type().Kind() != reflect.Struct {
continue
}
name := struct2.FieldByName("Name")
if name.Kind() != reflect.String {
continue
}
ans = append(ans, name.String())
}
}
return strings.Join(ans[:], " / ")
}
- 1 回答
- 0 關注
- 116 瀏覽
添加回答
舉報