嘗試連接涉及陣列和函數呼叫的程式碼行時會出現一個常見問題。例如,考慮以下成功連接兩行的原始程式碼:
<code class="go">hash := sha1.Sum([]byte(uf.Pwd)) u.Pwhash = hex.EncodeToString(hash[:])</code>
但是,如果您嘗試將程式碼合併為一行,則可能會遇到錯誤訊息:
<code class="go">u.Pwhash = hex.EncodeToString(sha1.Sum([]byte(uf.Pwd))[:])</code>
錯誤訊息表明切片函數呼叫的返回值存在問題。在 Go 中,函數呼叫的回傳值(例如 sha1.Sum() 中的回傳值)是不可尋址的。
要理解這種行為,了解 Go 中的可尋址類型非常重要。根據Go規範,只有以下內容是可尋址的:
由於sha1.Sum() 的回傳值不是這些類型之一,因此無法對其進行切片。對數組進行切片,按照這裡的要求,要求數組是可尋址的。
在原始程式碼的第一行中,傳回的陣列儲存在局部變數(雜湊)中,該變數是可尋址的。在第二行中,計算了 hex.EncodeToString(hash[:]),它按預期工作。
變數和傳回值之間的差異凸顯了理解 Go 尋址規則的重要性。遵循這些規則,您可以避免常見錯誤並編寫更健壯的程式碼。
以上是為什麼我不能在 Go 中對函數返回值進行切片?的詳細內容。更多資訊請關注PHP中文網其他相關文章!