2 回答
TA贡献2019条经验 获得超9个赞
Go 中没有直接的等价物。
如果对象很大(大于 32-64 字节)和/或需要更改,则通过指针传递。
如果上述规则不适用,则按值传递。
映射/通道/切片是引用类型,它们包含内部指针,因此您不需要通过指针传递它们,除非您计划可能传递 nil 或想要附加(不修改已包含的元素)到切片。
例子:
func doMap(m *map[string]string) {
if *m == nil {
*m = map[string]string{}
}
.....
}
TA贡献1789条经验 获得超10个赞
对于可以*string用作参数的字符串,您似乎无法更改原始字符串:
package main
import (
"fmt"
)
func t1(s *string) {
fmt.Println("Inside before: %s", *s)
s2 := "tEsT1"
s = &s2
fmt.Println("Inside after 1: %s", *s)
}
func main() {
var s = "test"
fmt.Println("Ourside before: %v", s)
t1(&s)
fmt.Println("Ourside after: %v", s)
}
印刷:
Ourside before: %v test
Inside before: %s test
Inside after 1: %s tEsT1
Ourside after: %v test
对于复杂的结构,通过引用和阻止编辑将更困难或不可能。
如果我弄错了,请纠正我(我只是在学习 Go)。
- 2 回答
- 0 关注
- 235 浏览
添加回答
举报
