行を結合するときに予期しないエラーが発生しました
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 サイトの他の関連記事を参照してください。