登录
首页 >  Golang >  Go问答

用数组构造结构

来源:stackoverflow

时间:2024-02-29 23:03:31 312浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《用数组构造结构》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

我有一个 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],
}

但我想应该有更好的方法。 有什么想法吗?


正确答案


问题中的代码没有任何问题。以下是如何使用 reflect api 来实现目标:

Export 使字段可通过反射 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])
}

Run an example on the Go Playground

如果您在多个地方需要代码,请将代码放入函数中:

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

Run an example on the playground

以上就是《用数组构造结构》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>