變數和函數傳回值行為的變異性
在程式設計中,了解變數和函數傳回值之間行為的差異至關重要。考慮以下程式碼片段:
<code class="go">hash := sha1.Sum([]byte(uf.Pwd)) u.Pwhash = hex.EncodeToString(hash[:])</code>
此程式碼按預期運行,其中雜湊變數儲存位元組數組的SHA1 雜湊值,u.Pwhash 變數保存該雜湊值的十六進位表示法。
但是,如果我們嘗試將這兩行合併為一行,則會遇到錯誤:
<code class="go">u.Pwhash = hex.EncodeToString(sha1.Sum([]byte(uf.Pwd))[:])</code>
錯誤訊息表明對sha1.Sum() 的傳回值進行切片是無效的。造成這種差異的原因是:
在第二個片段中,我們嘗試對 sha1.Sum()[:] 進行切片,這是不允許的,因為 sha1.Sum 的回傳值() 無法定址。切片操作要求其操作數是可尋址的。
因此,為了正確組合行,我們首先需要將sha1.Sum() 的回傳值儲存在像hash 這樣的可尋址變數中,然後再對其進行切片:
<code class="go">hash := sha1.Sum([]byte(uf.Pwd)) u.Pwhash = hex.EncodeToString(hash[:])</code>
理解變數和函數傳回值的可尋址性和行為對於編寫正確且高效的Go 程式碼至關重要。
以上是為什麼我不能對 Go 中函數的回傳值進行切片?的詳細內容。更多資訊請關注PHP中文網其他相關文章!