更新到全局变量的成员未反映在全局变量中

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


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


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)

    }

}


潇潇雨雨
浏览 130回答 1
1回答

不负相思意

如果你有: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 的行为,请使用指针)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go