gpt4 book ai didi

go - 更新全局变量的成员未反射(reflect)在全局变量中

转载 作者:数据小太阳 更新时间:2023-10-29 03:35:45 30 4
gpt4 key购买 nike

首先,我是 Go 的新手,所以我想对我来说很明显有一些正确的方法可以实现我在这里想要实现的目标。

我遇到的问题是当我运行 test() 时,以下代码不会打印“blah”。相反,即使 main() 首先执行,如果打印出 nil。为什么更新全局变量的成员属性不会在不同的函数中反射(reflect)出来?

var GlobalMe SomeType

func main() {
for _,member := range GlobalMe.Members {
member.SomeProperty = "blah"
}
test()
}

func test() {
for _,member := range GlobalMe.Members {
fmt.Println("value:", member.SomeProperty)
}
}

最佳答案

如果你有:

type SomeMemberType struct {
SomeProperty string
}

type SomeType struct {
Members []SomeMemberType
}

var GlobalMe SomeType

只需将 SomeType 更改为:

type SomeType struct {
Members []*SomeMemberType
}

人们常常觉得这不符合直觉,但在处理交易时通常是有道理的具有更多基本类型:

xs := []int{1,2,3}
for _, x := range xs {
x = 4
}
// xs is still {1,2,3}

这实际上没有编译,但如果编译了,xs 也不会改变。如果你想要要修改原件,您必须执行以下操作:

xs := []int{1,2,3}
for i := range xs {
xs[i] = 4
}
// xs is now {4,4,4}

这种行为在大多数编程语言中都很常见。通过对结构做同样的事情,Go 只是更明确一点。 (所以如果你想要类似 java 的行为使用指针)

关于go - 更新全局变量的成员未反射(reflect)在全局变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32054113/

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