问题描述
如何以编程方式访问如下所示的 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)
}