ホームページ > バックエンド開発 > Golang > Goでバイトスライスと配列を正しく追加するにはどうすればよいですか?

Goでバイトスライスと配列を正しく追加するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-08 18:04:13
オリジナル
716 人が閲覧しました

How to Correctly Append Byte Slices and Arrays in Go?

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...)
ログイン後にコピー

追加メモ

  • Go の ... 演算子を使用すると、スライスを可変個引数として渡すことができます引数。
  • 異なる長さのスライスを追加すると、結果のスライスの長さは、入力スライスの長さの合計と同じになります。
  • []T... 構文も同様です。次の可変長リストでスライスを初期化したいときに使用されます。

結論

append 関数のニュアンスと可変個引数に関する Go 仕様のガイドラインを理解することで、Go でバイト配列を効率的に追加でき、元のコードで発生したエラーを回避してください。

以上がGoでバイトスライスと配列を正しく追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート