1. ホーム
  2. go

[解決済み] Goで配列をスライスに変換する

2023-04-13 08:01:02

質問

これはかなり一般的なことのように思われ、インターウェブ上で豊富な例があります。 [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)

はあまりよくありません。 特にデータのコピーを作成せずに、これを行うにはどうすればよいでしょうか(私が行っているのはデータを渡すだけなのに、このデータをコピーするのは馬鹿げているように思えます)。

どのように解決するのですか?

これは動作するはずです。

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[:])
}

また、基礎となるバッファのコピーを作成しません。