変数と関数の戻り値の動作の多様性
プログラミングでは、変数と関数の戻り値の動作の違いを理解することが不可欠です。次のコード スニペットを考えてみましょう:
<code class="go">hash := sha1.Sum([]byte(uf.Pwd)) u.Pwhash = hex.EncodeToString(hash[:])</code>
このコードは意図したとおりに機能し、ハッシュ変数にはバイト配列の SHA1 ハッシュが格納され、u.Pwhash 変数にはそのハッシュの 16 進表現が保持されます。
ただし、これら 2 行を 1 つに結合しようとすると、次のエラーが発生します。
<code class="go">u.Pwhash = hex.EncodeToString(sha1.Sum([]byte(uf.Pwd))[:])</code>
このエラー メッセージは、sha1.Sum() の戻り値をスライスすることが無効であることを示しています。この違いは次の理由で発生します。
2 番目のスニペットでは、sha1.Sum()[:] をスライスしようとしますが、sha1.Sum の戻り値が無効になるため、これは許可されません。 () はアドレス指定できません。スライス操作では、オペランドがアドレス指定可能である必要があります。
したがって、行を正しく結合するには、スライスする前に、まず sha1.Sum() の戻り値をハッシュなどのアドレス指定可能な変数に格納する必要があります。
<code class="go">hash := sha1.Sum([]byte(uf.Pwd)) u.Pwhash = hex.EncodeToString(hash[:])</code>
変数と関数の戻り値のアドレス指定可能性と動作を理解することは、正しく効率的な Go コードを作成するために非常に重要です。
以上がGo で関数の戻り値をスライスできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。