Golang如何优雅地将数组赋值给结构体?

结构体:
type MyStruct struct{
    Age string
    Name string
    City string
    ......
}

数组:
arr := [ 25 李明 北京 ......]

我的赋值方式:
MyStruct.Age = arr[0]
MyStruct.Name = arr[1]
MyStruct.City = arr[2]
......

像这种数组顺序和结构体顺序一一对应的情况,有没有一种Go原生方法能便捷地进行赋值?

阅读 12.9k
3 个回答

并没有很优雅的方法。内置的json是使用反射,效率非常低,而且要使用map相对应,如下

type MyStruct struct {
    Age  string `json:"age"`
    Name string `json:"name"`
    City string `json:"city"`
}

b := []byte(`{"age": "24", "name": "mry", "city":"beijing"}`)
json.Unmarshal(b, s)

你用的array,直接new对象,然后依次赋值,效率是最高的了。
也有可能是有其他我不知道的方法,期待高手

新手上路,请多包涵

这个应该能优雅些,但是效率差点
https://github.com/pkgng/stru...

type MyStruct struct {
    structor.BaseStructor  `structor:"alist"`
    Age  string `json:"age" structor:"alist[0]`
    Name string `json:"name" structor:"alist[1]`
    City string `json:"city" structor:"alist[2]`
}
新手上路,请多包涵

使用reflect来做,

model := MyStruct{}
elem := reflect.ValueOf(&model).Elem()
for i, v := range argArr {
    elem.Field(i).SetString(v)
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题