亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang規范中有關方法值的部分中的“非接口方法”是什么意思?

golang規范中有關方法值的部分中的“非接口方法”是什么意思?

Go
慕妹3146593 2023-07-17 14:37:27
Go 編程語言規范說:與選擇器一樣,使用指針對具有值接收器的非接口方法的引用將自動取消對該指針的引用:pt.Mv 相當于 (*pt).Mv。和:與方法調用一樣,使用可尋址值對具有指針接收器的非接口方法的引用將自動采用該值的地址:t.Mp 相當于 (&t).Mp。那么,在給定的上下文中,什么是非接口方法呢?
查看完整描述

2 回答

?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

接口方法意味著您引用(您調用)的方法是對接口值(其方法集包含該方法)的調用。同樣,非接口方法意味著您引用(調用)的方法不是對接口值(而是對具體類型)的調用。


例如:


var r io.Reader = os.Stdin

r.Read(nil) // Interface method: type of r is an interface (io.Reader)


var p image.Point = image.Point{}

p.String() // Non-interface method, p is a concrete type (image.Point)

要演示自動取消引用和地址獲取,請參閱以下示例:


type myint int


func (m myint) ValueInt() int { return int(m) }


func (m *myint) PtrInt() int { return int(*m) }


func main() {

    var m myint = myint(1)


    fmt.Println(m.ValueInt()) // Normal

    fmt.Println(m.PtrInt())   // (&m).PtrInt()


    var p *myint = new(myint)

    *p = myint(2)


    fmt.Println(p.ValueInt()) // (*p).ValueInt()

    fmt.Println(p.PtrInt())   // Normal

}

它輸出(在Go Playground上嘗試):


1

1

2

2


查看完整回答
反對 回復 2023-07-17
?
浮云間

TA貢獻1829條經驗 獲得超4個贊

type T struct {}


func (t *T) f() {}


func main() {

  x := T{}

  x.f()

}

上面,xf是一個非接口方法。


查看完整回答
反對 回復 2023-07-17
  • 2 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號