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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?
