我正在做 http://tour.golang.org/ 。谁能向我解释 第 1、3、5 和 7 行 的这个功能,尤其是 ‘*’ 和 ‘&’ 的作用?通过在函数声明中提及它们,它们应该/期望做什么?玩具示例:
1: func intial1(var1 int, var2 int, func1.newfunc[]) *callproperfunction {
2:
3: addition:= make ([] add1, var1)
4: for i:=1;i<var2;i++ {
5: var2 [i] = *addtother (randomstring(lengthofcurrent))
6: }
7: return &callproperfunction {var1 int, var2 int, func1.newfunc[], jackpot}
8: }
看起来它们就像我们在 C++ 中拥有的指针一样。但我无法将这些概念与我们这里的内容联系起来。换句话说,当我在 Go 的函数声明中使用它们时,’*’ 和 ‘&’ 做了什么。
我知道引用和取消引用是什么意思。我不明白我们如何在 Go 中使用指向函数的指针?例如第 1 行和第 7 行,这两行是做什么的?声明名为 intial1 的函数返回一个指针?在第 7 行,我们使用 return 函数用参数调用它。
原文由 David 发布,翻译遵循 CC BY-SA 4.0 许可协议
这可能是 Go 中最令人困惑的事情之一。基本上有3种情况你需要了解:
&
运营商&
当你想获取变量的 内存地址 时,在变量前面。*
运算符*
位于保存内存地址并解析它的变量前面(因此它对应于&
运算符)。它去获取指针指向的东西,例如*myString
。或者更有用的是,像
*
在Type前面当
*
放在 类型 前面时,例如*string
,它成为类型声明的一部分,所以你可以说“这个变量持有一个指向字符串的指针”。例如:所以令人困惑的是
*
真的被用于 2 个独立的(尽管相关的)事物。星号可以是运算符 或 类型的一部分。