为了账号安全,请及时绑定邮箱和手机立即绑定

从数组创建结构

从数组创建结构

Go
慕工程0101907 2022-09-12 16:08:35
我有一个看起来像这样:Employee structtype Employee struct {  firstName string  lastName  string  role      string}我从Excel文件中读取了一行,该行具有相同顺序的相应列。从excel文件中,我创建了一个保存此数据的数组,因此该数组如下所示:[personFirstName, personLastName, personRole]我想用它来初始化我的员工结构。但是我不知道该怎么做,因为我不能像迭代数组一样迭代 Employee 结构。我想过手动完成它,就像这样:e := {  firstName: array[0],  lastName: array[1],  role: array[2],}但我想应该有更好的方法。有什么想法吗?
查看完整描述

1 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

问题中的代码没有错。下面介绍如何使用反射 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])

}

在 Go 游乐场上运行一个示例。


如果需要将代码放在多个位置,请将代码放在函数中:


// 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} 

在操场上运行一个示例。


查看完整回答
反对 回复 2022-09-12
  • 1 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号