将值间接添加到嵌套结构中。

huangapple go评论152阅读模式
英文:

Add values indirect to nested struct

问题

我在Golang中设置了一个嵌套结构,并且我想间接地填充它的值。

type Categories struct {
    A ABCDE `json:"A"`
    B ABCDE `json:"B"`
    C ABCDE `json:"C"`
    D ABCDE `json:"D"`
    E ABCDE `json:"E"`
}

type ABCDE struct {
    Foo string `json:"foo"`
}

直接赋值当然是可以的:

categories := Categories{}
categories.A.Foo = "Salute"

间接赋值的伪代码如下:

categories := Categories{}
categories["A"].Foo = "Salute"

直接赋值当然没有问题。有没有办法实现间接赋值的解决方案,以便我能够将嵌套对象作为参数放入其中?

英文:

i setup a nested struct in Golang and i want to fill it with values indirect.

type Categories struct {
	A ABCDE `json:"A"`
	B ABCDE `json:"B"`
	C ABCDE `json:"C"`
	D ABCDE `json:"D"`
	E ABCDE `json:"E"`
}

type ABCDE struct {
	Foo string `json:"foo`
}

Direct is working of course:

categories:= Categories{}
Categories.A.Foo = "Salute"

Indirect as pseudo code:

categories:= Categories{}
Categories.["A"].Foo = "Salute"

Direct solution is of course no problem. Is there a way to implement the indirect solution, that i am able to put the nested object inside as parameter?

答案1

得分: 1

你可以使用反射(reflect包)。

categories := Categories{}
reflect.ValueOf(&categories).
Elem().
FieldByName("A").
FieldByName("Foo").SetString("Salute")

PLAYGROUND

英文:

You can use reflection (reflect package).

categories:= Categories{}
reflect.ValueOf(&categories).
	Elem().
	FieldByName("A").
	FieldByName("Foo").SetString("Salute")

<kbd>PLAYGROUND</kbd>

huangapple
  • 本文由 发表于 2021年11月12日 23:32:49
  • 转载请务必保留本文链接:https://go.coder-hub.com/69945340.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定