gpt4 book ai didi

go - 如何选择在运行时更新哪个结构成员?

转载 作者:行者123 更新时间:2023-12-01 20:26:10 25 4
gpt4 key购买 nike

假设我在Go中有一个结构如下:

LastUpdate struct {
Name string `yaml:"name"`
Address string `yaml:"address"`
Phone string `yaml:"phone"`
}

现在说我想创建一个接受字段名称的函数(例如“电话”),然后将该字段更新为一个值,例如今天的日期。

如何以一种可以接受字段名称并在结构中更新该字段的方式构建函数?

我知道我可以为每种情况做一个IF子句(如果field ==“Phone”){var.LastUpdate.Phone = time.Now()。Date()},但是我想构建此函数,以便以后,我不必每次都向该结构添加新成员时都添加IF子句。有什么想法吗?

最佳答案

使用reflect包按名称设置字段。

// setFieldByName sets field with given name to specified value.
// The structPtr argument must be a pointer to a struct. The
// value argument must be assignable to the field.
func setFieldByName(structPtr interface{}, name string, value interface{}) error {

v := reflect.ValueOf(structPtr)
v = v.Elem() // deference pointer
v = v.FieldByName(name) // get field with specified name

if !v.IsValid() {
return errors.New("field not found")
}

v.Set(reflect.ValueOf(value))

return nil
}

像这样使用它:
var lu LastUpdate
setFieldByName(&lu, "Name", "Russ Cox")

Run it on the Playground

关于go - 如何选择在运行时更新哪个结构成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62124770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com