Go でのバイト スライスと配列の追加: トラブルシューティングと解決策
Go で 2 バイトの配列スライスを追加すると、予期しないエラーが発生する可能性があります。次のコードを考えてみましょう:
one := make([]byte, 2) two := make([]byte, 2) one[0] = 0x00 one[1] = 0x01 two[0] = 0x02 two[1] = 0x03 log.Printf("%X", append(one[:], two[:])) three := []byte{0, 1} four := []byte{2, 3} five := append(three, four)
このコードは次のエラーを生成します:
cannot use four (type []uint8) as type uint8 in append cannot use two[:] (type []uint8) as type uint8 in append
Go の堅牢なスライスに対する評判に反して、これらのエラーは説明がつかないように思えます。この問題を理解して解決するには、Go プログラミング言語仕様を詳しく調べる必要があります。
仕様を理解する
Go 仕様によると、append 関数はS 型のスライス s と T 型の 0 個以上の値 x (T は S の要素型)。結果は、次の要素を持つ S 型の新しいスライスです。 s の後に x の要素が続きます。
重要なのは、最後の引数については、スライス タイプ []T に割り当て可能な場合、その後に続く場合は ...T パラメータの値として変更せずに渡すことができます。 by ....
エラーへの対処
提供されたコードでは、追加する最後の引数はこれを解決するには、最後の引数に []T... を明示的に指定する必要があります。この場合、T はバイトなので、コードは次のようになります:
fmt.Println(append(one[:], two[:]...))
2 番目の例では、同様の変更を行う必要があります:
five := append(three, four...)
追加メモ
結論
append 関数のニュアンスと可変個引数に関する Go 仕様のガイドラインを理解することで、Go でバイト配列を効率的に追加でき、元のコードで発生したエラーを回避してください。
以上がGoでバイトスライスと配列を正しく追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。