一个验证包让我背串这样如果我的结构某一领域没有通过验证:由包含完整路径给定的字符串访问在Golang结构领域
myString := "Stream.Fields[0].Name"
哪有我使用这个字符串来访问它中指定的struct字段?我需要以某种方式参考它,但我不知道从哪里开始。
我开始学习Go并且已经遇到了似乎能够做到的“Reflect”包,但我不知道要寻找什么或者如何制定正确的问题。
一个验证包让我背串这样如果我的结构某一领域没有通过验证:由包含完整路径给定的字符串访问在Golang结构领域
myString := "Stream.Fields[0].Name"
哪有我使用这个字符串来访问它中指定的struct字段?我需要以某种方式参考它,但我不知道从哪里开始。
我开始学习Go并且已经遇到了似乎能够做到的“Reflect”包,但我不知道要寻找什么或者如何制定正确的问题。
您需要为此使用reflect包。 在这里,我已经写这给像Stream.Details.Name
一个实例和字符串键会从实例Stream
这适用于结构领域详情返回Name
无array
或map
运营商,只是.
运营商的样本函数。您可以延长该支持[]
藏汉
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
for _, key := range keySlice[1:] {
if 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播放链接:https://play.golang.org/p/2qxTZgN1_K
谢谢你的一个很好的例子,我会试图找出它! – Greg
可能会作出这样的字符串[文/模板]兼容(https://golang.org/pkg/text /模板/)和解析使用? – YOU
你需要使用'反射'包 –