type Foo [3]intarr := [3]int {1, 2, 3}foo := &Foo{arr}它在golang中不起作用,它说:不能使用“arr”(类型 [3]int)作为类型 int我应该如何正确和优雅地做到这一点;-),我希望我的代码可以写成如下:func_name(&Foo{arr}) // func_name is to receive a *Foo and do something如果我这样写我的代码:type Foo struct {array [3]int} arr := [3]int {1, 2, 3} func_name(&Foo(arr))它工作正常,但我希望我的代码可以尽可能简单。
2 回答
慕斯709654
TA贡献1840条经验 获得超5个赞
您的意思是:
arr := [3]int{1, 2, 3} foo := Foo(arr)
这里有一个游乐场链接可以尝试一下。这不是一个别名;分配时将复制数组。如果要查找别名,请考虑改用切片。
原始代码会创建一个新的元素,并尝试使用 初始化其第一个元素,但由于编译器指定的原因而失败。Foo
arr
米琪卡哇伊
TA贡献1998条经验 获得超6个赞
假设“别名”是指“两种不同类型的人引用同一个底层缓冲区”:获取指向数组的指针,然后将其转换为另一种类型的指针。
package main
import "fmt"
type Foo [1]int
func main() {
bar := [1]int{}
foo := (*Foo)(&bar)
bar[0] = 0xdeadbeef
fmt.Println(*foo)
}
这在围棋中既不优雅也不习惯用语——这就是切片的用途。
- 2 回答
- 0 关注
- 114 浏览
添加回答
举报
0/150
提交
取消