Golang中的数组字面量解析(Rob Pike演讲内容)
Golang中的数组字面量解析(Rob Pike演讲内容)
我遇到了Rob Pike在他为期三天的讲座(2011年)中演示的一个示例问题。
问题是:
cannot use &ar (type *[3]int) as type[3]*int in argument to f2
这是Go语言最新版本中的变更,还是我忽略了某些细节?😟
代码如下:
package main
import (
"fmt"
)
func f1(a [3]int) {
fmt.Println(a)
}
func f2(a *[3]int) { // 修正拼写错误
fmt.Println(a)
}
func main() {
var ar [3]int
f1(ar)
f2(&ar)
}
更多关于Golang中的数组字面量解析(Rob Pike演讲内容)的实战教程也可以访问 https://www.itying.com/category-94-b0.html
非常感谢。@lutzhorn
更多关于Golang中的数组字面量解析(Rob Pike演讲内容)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
抱歉各位Gopher们,这是我的错误,我刚意识到我打错了一个关键的字
[3]*int 而不是 *[3]int。
无论如何还是谢谢大家。
你可以编辑你的第一篇文章并修正其中的拼写错误。请同时使用四个空格缩进每行代码。这将使代码更具可读性。编辑文本框顶部的</>按钮可以帮助你完成此操作。
在您提供的代码中,错误信息 cannot use &ar (type *[3]int) as type [3]*int in argument to f2 表明您尝试将一个指向数组的指针(*[3]int)传递给函数 f2,但 f2 的参数类型被定义为 [3]*int(一个包含3个指向整数的指针的数组),而不是 *[3]int(指向一个包含3个整数的数组的指针)。这可能是您在代码中定义 f2 时的一个类型错误,而不是Go语言版本变更导致的。
根据您的代码片段,f2 函数被声明为接受 *[3]int 类型,但在错误信息中,它被描述为 [3]*int。这很可能是您在原始代码中误写了参数类型。在Go语言中,*[3]int 和 [3]*int 是不同的类型:
*[3]int:指向一个包含3个整数的数组的指针。[3]*int:一个包含3个指向整数的指针的数组。
您的代码中 f2 函数定义为 func f2(a *[3]int),这应该与 &ar(类型为 *[3]int)兼容。如果错误仍然出现,请检查是否在代码中错误地将 f2 的参数类型写成了 [3]*int。以下是修正后的示例代码,基于您提供的片段:
package main
import (
"fmt"
)
func f1(a [3]int) {
fmt.Println(a)
}
func f2(a *[3]int) { // 参数类型为 *[3]int,与 &ar 匹配
fmt.Println(a)
}
func main() {
var ar [3]int
f1(ar) // 传递数组值
f2(&ar) // 传递数组指针,类型为 *[3]int
}
如果您的原始代码中 f2 被错误地定义为 func f2(a [3]*int),则会出现上述类型不匹配错误。确保 f2 的参数类型与传递的 &ar 一致。Go语言从早期版本到最新版本(如Go 1.21)中,数组和指针的类型规则保持一致,没有重大变更导致此问题。

