Go 通过包含完整路径的给定字符串访问struct字段
如果结构中的给定字段未通过验证,验证程序包将返回如下字符串:Go 通过包含完整路径的给定字符串访问struct字段,go,Go,如果结构中的给定字段未通过验证,验证程序包将返回如下字符串: myString := "Stream.Fields[0].Name" 如何使用此字符串访问其中指定的struct字段?我需要以某种方式引用它,但我不知道从哪里开始 我开始学习围棋,并且已经遇到了“Reflect”软件包,它似乎能够做到这一点,但我不知道要寻找什么或如何制定正确的问题。您需要使用该软件包。 这里我编写了一个示例函数,它给出了一个实例和字符串键,比如Stream.Details.Name将从instanceStream
myString := "Stream.Fields[0].Name"
如何使用此字符串访问其中指定的struct字段?我需要以某种方式引用它,但我不知道从哪里开始
我开始学习围棋,并且已经遇到了“Reflect”软件包,它似乎能够做到这一点,但我不知道要寻找什么或如何制定正确的问题。您需要使用该软件包。
这里我编写了一个示例函数,它给出了一个实例和字符串键,比如Stream.Details.Name
将从instanceStream
的字段Details返回Name
这适用于没有数组
或映射
运算符的结构,只有
运算符。您也可以扩展它以支持[]
func getValueFromStruct(keyWithDots string, object interface{}) (interface{}, error) {
keySlice := strings.Split(keyWithDots, ".")
v := reflect.ValueOf(object)
// iterate through field names ,ignore the first name as it might be the current instance name
// you can make it recursive also if want to support types like slice,map etc along with struct
for _, key := range keySlice[1:] {
for v.Kind() == reflect.Ptr {
v = v.Elem()
}
// we only accept structs
if v.Kind() != reflect.Struct {
return nil, fmt.Errorf("only accepts structs; got %T", v)
}
v = v.FieldByName(key)
}
return v, nil
}
这是golang play链接:您需要使用此软件包。
这里我编写了一个示例函数,它给出了一个实例和字符串键,比如Stream.Details.Name
将从instanceStream
的字段Details返回Name
这适用于没有数组
或映射
运算符的结构,只有
运算符。您也可以扩展它以支持[]
func getValueFromStruct(keyWithDots string, object interface{}) (interface{}, error) {
keySlice := strings.Split(keyWithDots, ".")
v := reflect.ValueOf(object)
// iterate through field names ,ignore the first name as it might be the current instance name
// you can make it recursive also if want to support types like slice,map etc along with struct
for _, key := range keySlice[1:] {
for v.Kind() == reflect.Ptr {
v = v.Elem()
}
// we only accept structs
if v.Kind() != reflect.Struct {
return nil, fmt.Errorf("only accepts structs; got %T", v)
}
v = v.FieldByName(key)
}
return v, nil
}
这里是golang play链接:此库也存在,它可能会执行您想要的操作:
库使用引擎盖下的。此库也存在,它可以执行您想要的操作:
lib使用引擎盖下的。可以使该字符串与之兼容并使用它进行解析?您需要使用
反射
包可以使该字符串与之兼容并使用它进行解析?您需要使用反射
包谢谢您提供了一个很好的示例,我将尝试解决它!谢谢你给我举了一个很好的例子,我会努力想办法的!