理解指標(& 和 *)
Go 通常需要將變數作為參數傳遞給函數。然而,在此類操作過程中遇到錯誤時可能會令人困惑。本文闡明了 & 和 * 指標之間的區別,解釋了何時應使用它們。
指標和位址
指標是儲存另一個變數位址的變數記憶。 & 運算子檢索變數的位址。例如,如果 'u' 是 User 結構體,則 '&u' 傳回 'u' 的位址。
使用& 解碼JSON
了解& 運算符,考慮以下程式碼:
var u User if err := decoder.Decode(&u); err != nil { // Code to handle error... }
json.Decode 函數需要一個指標來解碼數據。在此範例中,「u」只是一個 User 結構,而不是指標。透過使用“&u”,我們為函數提供“u”的位址,從而使解碼成功。
指標和重定向
運算子可以被認為是儲存在指標位址處的值的「重定向」。例如,如果指標「x」儲存「y」的位址,則「x」為我們提供「y」的值。
考慮以下程式碼:
x := new(User) // Creates a pointer to a User struct *x = y // Assigns the value of 'y' to the struct pointed to by 'x' fmt.Println(*x) // Prints the value of 'y'
使用總結
以上是Go 指標:何時使用「&」和「*」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!