带类型别名的强制转换go数组

wfsdck30  于 2023-06-27  发布在  Go
关注(0)|答案(2)|浏览(133)

假设我有一个字节数组的别名,如下所示。有没有一种简单的方法可以将字节数组转换成字节数组,反之亦然?

package main

import "fmt"

type Bytes []byte

func main() {
    x := make([][]byte, 3)
    y := ([]Bytes)(x)
    fmt.Println("Hello, 世界", y)
}
yqhsw0fo

yqhsw0fo1#

有没有一个简单的方法可以将一个字节数组的数组转换成一个字节数组
用一个真实的化名你就能做到。但是Bytes不是别名,它是一个独特的类型,只有与[]byte相同的 * 底层类型 *。在这种情况下,唯一的选择是使用循环。
另请参阅如果T1T2具有相同的底层类型,是否可以将[]T1转换为[]T2?.

hzbexzde

hzbexzde2#

不,不幸的是Go不允许不同类型之间的直接转换,即使它们是别名。Alias更像是为现有类型赋予新名称,但它不提供任何形式的自动转换。
需要手动迭代**[][]byte**,将每个**[]byte转换为Bytes**类型。
你可以这样做:

package main

import "fmt"

type Bytes []byte

func main() {
    x := make([][]byte, 3)
    // Initializing byte slices for demonstration purposes
    for i := range x {
        x[i] = []byte{byte(i), byte(i+1)}
    }

    y := make([]Bytes, len(x))
    for i, v := range x {
        y[i] = Bytes(v)
    }

    fmt.Println("Hello, 世界", y)
}

此代码手动遍历x,将每个**[]字节 * 转换为Bytes,并将其放置在y的相应位置。

相关问题