考虑以下示例。我不完全了解“后台”会发生什么,并寻求解释。从主函数Foo调用时,此版本似乎复制了该结构AddToEntry。正确的?如何在代码中“证明”这一点?
当go复制该结构时,我只是在操纵该结构的副本,当我返回该main函数时,是否像以前一样看到原始文件?
当我希望有一个指针(请参见代码中的注释)时,一切都很好,没有复制我的结构。如何避免这种“错误”?如何确定不复制该结构?是否有可能对此进行编译时/运行时检查,或者我要小心吗?
package main
import (
"fmt"
)
type Foo struct {
Entry []string
}
func MakeFoo() Foo {
a:=Foo{}
a.Entry = append(a.Entry,"first")
return a
}
// if I change (f Foo) to (f *Foo), I get
// the "desired" result
func (f Foo) AddToEntry() {
f.Entry = append(f.Entry,"second")
}
func main() {
f:=MakeFoo()
fmt.Println(f) // {[first]}
f.AddToEntry()
fmt.Println(f) // {[first]}
}
青春有我
繁星点点滴滴
交互式爱情
相关分类