go - 从数组创建结构
问题描述
我有一个Employee struct
看起来像这样的:
type Employee struct {
firstName string
lastName string
role string
}
我从 Excel 文件中读取了一行,其中对应的列的顺序相同。从 excel 文件中,我创建了一个包含此数据的数组,因此该数组如下所示:
[personFirstName, personLastName, personRole]
我想用它初始化我的 Employee 结构。但我不知道怎么做,因为我不能像数组一样遍历 Employee 结构。我想过手动做,像这样:
e := {
firstName: array[0],
lastName: array[1],
role: array[2],
}
但我想应该有更好的方法。有任何想法吗?
解决方案
问题中的代码没有任何问题。以下是如何使用反射 API 来实现目标:
导出字段以通过反射 API 使字段可设置。
type Employee struct {
FirstName string
LastName string
Role string
}
为员工创造反映价值。&
需要和Elem()
恶作剧才能获得可设置的值。
var e Employee
v := reflect.ValueOf(&e).Elem()
对于每个字段,设置字符串:
for i := 0; i < v.NumField(); i++ {
v.Field(i).SetString(values[i])
}
如果您在多个地方需要它,请将代码放在一个函数中:
// setStrings sets the fields of the struct pointed
// to by ptr to the specified values.
func setStrings(ptr interface{}, values []string) {
v := reflect.ValueOf(ptr).Elem()
for i := 0; i < v.NumField(); i++ {
v.Field(i).SetString(values[i])
}
}
像这样称呼它:
values := []string{"Monica", "Smith", "Manager"}
var e Employee
setStrings(&e, values)
fmt.Printf("%+v\n", e) // prints {FirstName:Monica LastName:Smith Role:Manager}
推荐阅读
- c++ - 接口和实现 C++
- r - 使用 R h2o 加载数据集
- nlp - NLP(自然语言处理)如何用任何方法检测问题?
- android - 当我单击底部表中的按钮时,我的应用程序停止
- r - R:查找类似/“重复”的文本数据对
- assembly - 将字符串上的 movzbl 写入寄存器
- javascript - 单击 NextJS 的按钮时,服务器端在 React 中呈现模式
- java - java ice4j 与 nist-sdp 包冲突
- asp.net - Global_asax_BeginRequest - 这行错误怎么办?
- ruby-on-rails - Sass::SyntaxError 防止 Heroku Rails 应用程序预编译