gpt4 book ai didi

pointers - 当我将变量传递给 golang 中的私有(private)方法时,它会创建一个新实例吗?

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

如果我有主要功能:

var a = "foo"
modify(a)
fmt.Println(a)

在哪里

func modify(s string) error {
s = "bar"
}

结果是 "foo" 还是 "bar"

最佳答案

没有。它不会编译,因为 'foo''bar' 都不是单个字符。但是假设您改用双引号。

在 Golang 中,参数是按值传递的(它们被复制到内存中的新位置 - 堆栈或堆),无论是私有(private)方法还是公共(public)方法或任意函数都无关紧要。新实例已修改。您的示例的结果将是 "foo"

为了修改位于函数外部的变量,您必须显式传递指向此类变量的指针。

func modify(s *string) {
*s = "bar"
}

...

var a = "foo"
modify(&a)
println(a) // will print "bar"

在这种情况下,指针本身通过值传递(它被复制)但它的值(a 的地址)仍然指向同一个变量。所以a可以通过指针修改。

关于pointers - 当我将变量传递给 golang 中的私有(private)方法时,它会创建一个新实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50684401/

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