登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-03 20:03:38 107浏览 收藏

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中用另一个数组初始化别名数组?》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>