首先,我是 Go 的新手,所以我想對我來說很明顯有一些正確的方法可以完成我在這里想要實現的目標。我遇到的問題是,當我運行 test() 時,以下代碼不會打印“blah”。相反,如果打印 nil,即使 main() 首先執行。為什么全局變量的成員屬性的更新不會在不同的函數中反映在自身上?var GlobalMe SomeTypefunc main() { for _,member := range GlobalMe.Members { member.SomeProperty = "blah" } test()}func test() { for _,member := range GlobalMe.Members { fmt.Println("value:", member.SomeProperty) }}
1 回答

不負相思意
TA貢獻1777條經驗 獲得超10個贊
如果你有:
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 的行為,請使用指針)
- 1 回答
- 0 關注
- 152 瀏覽
添加回答
舉報
0/150
提交
取消