为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
尚方宝剑之说 2022-08-24 12:51:21
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)

这里有一个游乐场链接可以尝试一下。这不是一个别名;分配时将复制数组。如果要查找别名,请考虑改用切片。


原始代码会创建一个新的元素,并尝试使用 初始化其第一个元素,但由于编译器指定的原因而失败。Fooarr


查看完整回答
反对 回复 2022-08-24
?
米琪卡哇伊

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)

}


这在围棋中既不优雅也不习惯用语——这就是切片的用途。


查看完整回答
反对 回复 2022-08-24
  • 2 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信