如何解决如何访问 map[string]interface {}?
如何以编程方式访问如下所示的 go 语言结构中的 msg
值“Design”?
在 subIssues[28].Fields.UnkNowns["customfield_11801"]
之后,我没有找到访问数据结构的语言结构。
解决方法
要转换为结构体并使用它,请查看此存储库:https://github.com/mitchellh/mapstructure。
如果你想自己做,像这样:(调整实现以匹配你的项目)
func SetField(obj interface{},name string,value interface{}) error {
structValue := reflect.ValueOf(obj).Elem()
structFieldValue := structValue.FieldByName(name)
if !structFieldValue.IsValid() {
return fmt.Errorf("No such field: %s in obj",name)
}
if !structFieldValue.CanSet() {
return fmt.Errorf("Cannot set %s field value",name)
}
structFieldType := structFieldValue.Type()
val := reflect.ValueOf(value)
if structFieldType != val.Type() {
return errors.New("Provided value type didn't match obj field type")
}
structFieldValue.Set(val)
return nil
}
type MyStruct struct {
Name string
Age int64
}
func (s *MyStruct) FillStruct(m map[string]interface{}) error {
for k,v := range m {
err := SetField(s,k,v)
if err != nil {
return err
}
}
return nil
}
func main() {
myData := make(map[string]interface{})
myData["Name"] = "Tony"
myData["Age"] = int64(23)
result := &MyStruct{}
err := result.FillStruct(myData)
if err != nil {
fmt.Println(err)
}
fmt.Println(result)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。