这似乎是一件相当常见的事情,在互联网上有很多例子,但我似乎找不到一个如何将[32]byte转换为[]byte的例子.

我有一个从外部库调用的函数,它返回一个数组

func Foo() [32]byte {...}

然后,我需要将结果传递给另一个函数进行进一步处理.

func Bar(b []byte) { ... }

不幸的是,如果我想打电话

d := Foo()
Bar(d)

我得到了

cannot convert d (type [32]byte) to type []byte

正在做什么

[]byte(d)

也好不到哪里go .我如何做到这一点,特别是在不创建数据副本的情况下(复制这些数据似乎很愚蠢,因为我所做的就是传递它).

推荐答案

这应该是有效的:

func Foo() [32]byte {
    return [32]byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}
}

func Bar(b []byte) {
    fmt.Println(string(b))
}

func main() {
    x := Foo()
    Bar(x[:])
}

并且它不会创建底层缓冲区的副本

Go相关问答推荐

Golang读写更接近于io.File

从Kafka到Clickhouse的实时消费数据

困扰围棋官方巡回赛的S建议所有方法都使用同一类型的接收器

如何在VSCode中为特定的.go文件创建调试配置?

go grpc:无法导入github.com/golang/protobuf/proto(没有所需的模块提供包github.com/gorang/protobuf-proto)

Azure golang SDK - 将 AcrPull 角色分配给 AKS 群集

如何测试 Zerolog 记录器引发类型错误的日志(log)事件?

通过 Terraform 中的 MapNestedAtribute 进行迭代

使用Go和Operator SDK通过API调用设置Kubernetes Pods的安装步骤

动态 SQL 集 Golang

为什么 `append(x[:0:0], x...)` 将切片复制到 Go 中的新后备数组中?

Wire google Inject with multi return from provider 函数

使用 Golang 在字符串中循环重复数据

在我的情况下,如何以正确的方式测试方法?

每次有人进入我的网站时如何运行特定功能?

具有近似约束的函数值导致的实例化失败

将接口方法的参数限制为几个允许的 struct ?

每 N 秒运行一次函数,上下文超时

如何解决在mac m1中运行gcc失败退出状态1?

Go 泛型是否与 LINQ to Objects 等效?