首頁 >後端開發 >Golang >Go 中的非指標值可以呼叫指標方法嗎?

Go 中的非指標值可以呼叫指標方法嗎?

Patricia Arquette
Patricia Arquette原創
2024-12-19 22:24:13585瀏覽

Can Pointer Methods Be Called on Non-Pointer Values in Go?

非指標型別的指標方法

對上一個問題的答案指出指標方法只能在指標上呼叫。然而,這似乎是不正確的,如以下成功呼叫非指標值上的指標方法的程式碼所示:

package main

import "fmt"

type car struct {
    wheels int
}

func (c *car) fourWheels() {
    c.wheels = 4
}

func main() {
    var c = car{}
    fmt.Println("Wheels:", c.wheels)
    c.fourWheels()
    fmt.Println("Wheels:", c.wheels)
}

解釋

The理解這種行為的關鍵在於方法接收者是一個指標。當您呼叫 c.fourWheels() 時,接收者值 c 是一個非指標。但是,由於接收者類型是指針,因此這被解釋為 (&c).fourWheels() 的簡寫。

根據 Go 規範,在呼叫方法時,如果接收者值是可尋址的且接收者類型是指針,則方法呼叫被解釋為指針方法呼叫。在我們的例子中,接收器值 c 是可尋址的,且接收器類型 *car 是一個指針,因此方法呼叫 c.fourWheels() 實際上是呼叫 (&c).fourWheels()。

此行為是與可以在指標和值上呼叫值方法,而只能在指標上呼叫指標方法的說法一致。對於指標方法,如果接收者值不是指針,則必須取消引用以獲得可用作接收者的指標值。

以上是Go 中的非指標值可以呼叫指標方法嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn