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

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

Dec 08, 2024 pm 06:04 PM

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Mar 03, 2025 pm 05:17 PM

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

Beegoフレームワークのページ間で短期情報転送を実装する方法は? Beegoフレームワークのページ間で短期情報転送を実装する方法は? Mar 03, 2025 pm 05:22 PM

Beegoフレームワークのページ間で短期情報転送を実装する方法は?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? Mar 03, 2025 pm 05:18 PM

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

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? Mar 10, 2025 pm 03:20 PM

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

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? Mar 10, 2025 pm 05:38 PM

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

Goでユニットテストをどのように書きますか? Goでユニットテストをどのように書きますか? Mar 21, 2025 pm 06:34 PM

Goでユニットテストをどのように書きますか?

Go言語でファイルを便利に書く方法は? Go言語でファイルを便利に書く方法は? Mar 03, 2025 pm 05:15 PM

Go言語でファイルを便利に書く方法は?

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

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

See all articles