Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《如何在golang中用另一个数组初始化别名数组?》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!
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))
它工作得很好,但我希望我的代码可以尽可能简单。
正确答案
您的意思是:
arr := [3]int{1, 2, 3}
foo := foo(arr)
这里是 playground link to try it。但这不是别名;数组在分配时将被复制。如果您正在寻找别名,请考虑使用切片。
您的原始代码创建一个新的 foo
并尝试使用 arr
初始化其第一个元素,但由于编译器指定的原因而失败。
假设“别名”的意思是“两种不同的类型引用”相同的底层缓冲区”:获取一个指向数组的指针,并将其转换为另一种类型的指针。
package main
import "fmt"
type Foo [1]int
func main() {
bar := [1]int{}
foo := (*Foo)(&bar)
bar[0] = 0xdeadbeef
fmt.Println(*foo)
}
这在 go 中既不优雅也不惯用——这就是切片的用途。
以上就是《如何在golang中用另一个数组初始化别名数组?》的详细内容,更多关于的资料请关注编程网公众号!