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

為什麼 Go 中可以呼叫非指標值的指標方法?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-30 13:00:18974瀏覽

Why Can I Call Pointer Methods on Non-Pointer Values in Go?

非指標值的指標方法呼叫

在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)
}

表達式 c.fourWheels() 是 (&c) 的簡寫.fourWheels()。這是因為 fourWheels 的接收者是指針,而 c 是非指針值。由於 c 是可尋址的,編譯器會自動取消引用它以取得指向 car 值的指針,然後將其用作接收者。

Go 規範中明確說明了此行為:

如果 x 是可尋址的並且 &x 的方法集包含 m,則 x.m()是(&x).m().

因此,雖然有關指標方法的一般規則仍然有效,但自動指標取消參考允許在某些情況下方便地對非指標值呼叫指標方法。需要注意的是,此行為僅適用於具有指標接收器的方法。

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

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