ホームページ  >  記事  >  バックエンド開発  >  Go で「sha1.Sum」スライスによって「無効な操作: アドレス指定できない値のスライス」エラーが発生するのはなぜですか?

Go で「sha1.Sum」スライスによって「無効な操作: アドレス指定できない値のスライス」エラーが発生するのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-24 17:43:02366ブラウズ

Why Does a `sha1.Sum` Slice Cause an

行を結合するときに予期しないエラーが発生しました

2 つの行を結合するために次のコードを変更しようとすると、エラー メッセージが表示されます:

オリジナル:

hash := sha1.Sum([]byte(uf.Pwd))
u.Pwhash = hex.EncodeToString(hash[:])

参加:

u.Pwhash = hex.EncodeToString(sha1.Sum([]byte(uf.Pwd))[:])

変更されたコードによりエラーが発生します:

invalid operation sha1.Sum(([]byte)(uf.Pwd))[:] (slice of unaddressable value)

問題の理解

このエラーは、修正されたコードでは、関数呼び出し sha1.Sum の戻り値が直接スライスされるために発生します。関数の戻り値はアドレス指定できないため、スライスできません。

Go でのアドレス指定可能

Go では、次のような特定のエンティティのみがアドレス指定可能です。

  • 変数
  • ポインタ間接参照
  • スライスインデックス作成
  • アドレス指定可能な構造体のフィールドセレクター
  • アドレス指定可能な配列を使用した配列インデックス作成 (例外: 複合リテラル) )

sha1.Sum が配列を返すため、エラーが発生します。この配列は、元のコードのようにローカル変数に格納されている場合にのみアドレス指定可能です。

解決策

この問題を解決するには、まず sha1.Sum の戻り値をローカル変数に格納し、アドレス指定可能な参照を与える必要があります。

結論

Go では、配列をスライスするときにこのようなエラーを回避するには、アドレス指定可能性の概念を理解することが重要です。スライスされたエンティティが直接または中間変数割り当てを通じてアドレス指定可能であることを常に確認してください。

以上がGo で「sha1.Sum」スライスによって「無効な操作: アドレス指定できない値のスライス」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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