如何在golang中用另一个别名数组初始化别名数组?

type Foo [3]int


arr := [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))

它工作正常,但我希望我的代码可以尽可能简单。


尚方宝剑之说
浏览 115回答 2
2回答

慕斯709654

您的意思是:arr := [3]int{1, 2, 3} foo := Foo(arr)这里有一个游乐场链接可以尝试一下。这不是一个别名;分配时将复制数组。如果要查找别名,请考虑改用切片。原始代码会创建一个新的元素,并尝试使用 初始化其第一个元素,但由于编译器指定的原因而失败。Fooarr

米琪卡哇伊

假设“别名”是指“两种不同类型的人引用同一个底层缓冲区”:获取指向数组的指针,然后将其转换为另一种类型的指针。package mainimport "fmt"type Foo [1]intfunc main() {    bar := [1]int{}    foo := (*Foo)(&bar)    bar[0] = 0xdeadbeef    fmt.Println(*foo)}这在围棋中既不优雅也不习惯用语——这就是切片的用途。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go