麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

從 Golang中 method has pointer receiverd 異常去理解interface機(jī)制

2019-11-10 19:21:51
字體:
供稿:網(wǎng)友

在Golang中第一次使用interface 遇到了一個(gè)有意思的問題:

method has pointer receiverd

這個(gè)問題很普遍,所以在此記錄先來。 先看以下例子:

package mainimport ( "fmt")// notifier is an interface that defined// type behavior.type notifier interface { notify()}// user defines a user in the PRogram.type user struct { name string email string}// notify implements a method with a poifunc (u *user) notify() { fmt.Printf("Sending user email to %s“,u.name)}// main is the entry point for the applifunc main() { // Create a value of type User and s u := user{"Bill", "[email protected]"} sendNotification(u)}func sendNotification(n notifier) { n.notify()}

運(yùn)行以上代碼,會(huì)得到一個(gè)這樣的錯(cuò)誤:

./listing36.go:32: cannot use u (type user) as type notifier in argument to sendNotification:user does not implement notifier (notify method has pointer receiver)

為了解決這個(gè)問題,首先得先了解一下Golang 中 方法的集合的概念,一個(gè)struct雖然可以通過值類型和引用類型兩種方式定義方法,但是不通的對(duì)象類型對(duì)應(yīng)了不同的方法集:

Values Methods Receivers----------------------------------------------- T (t T)*T (t T) and (t *T)

值類型的對(duì)象只有(t T) 結(jié)構(gòu)的方法,雖然值類型的對(duì)象也可以調(diào)用(t *T) 方法,但這實(shí)際上是Golang編譯器自動(dòng)轉(zhuǎn)化成了&t的形式來調(diào)用方法,并不是表明值類型的對(duì)象擁有該方法。

換一個(gè)維度來看上面的表格可能更加直觀:

Methods Receivers Values-----------------------------------------------(t T) T and *T(t *T) *T

這就意味著指針類型的receiver 方法實(shí)現(xiàn)接口時(shí),只有指針類型的對(duì)象實(shí)現(xiàn)了該接口。

對(duì)應(yīng)上面的例子來說,只有&user實(shí)現(xiàn)了notifier接口,而user根本沒有實(shí)現(xiàn)該接口。所以上面代碼會(huì)報(bào)出這樣的異常。

notify method has pointer receiver

解決這個(gè)問題也很容易,直接使用&user去代替user調(diào)用方法即可:

func main() { // Create a value of type User and send a notification. u := user{"Bill", "[email protected]"} sendNotification(&u) // PASSED THE ADDRESS AND NO MORE ERROR.}

希望我通過這個(gè)異常,更深入的了解了Golang的interface機(jī)制。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久久精品视频免费 | 2023av在线视频| 日本一区视频在线观看 | 人人舔人人插 | av成人免费在线观看 | 免费黄色大片网站 | japanese javhd| av免费在线观看国产 | 狠狠干最新网址 | 国语自产免费精品视频在 | 久久千人斩 | 久久美女色视频 | 免费视频一区 | 国产五区 | 欧美一区二区片 | 欧洲伊人网 | 亚洲成在人 | 国产亚洲精彩视频 | 欧美成网站 | 亚洲成人精品国产 | 免费观看黄视频 | 国产午夜精品一区二区三区四区 | 成人一级片毛片 | 欧美久久一区 | 国产成人在线免费看 | 精品国产一区二区三区四 | 久久国产成人午夜av浪潮 | 黄色av电影在线播放 | 亚洲精品日韩色噜噜久久五月 | 国产免费一级淫片a级中文 99国产精品自拍 | av电影在线网 | 99成人在线 | av中文一区| 国产毛片网| 国产一区二区三区四区五区精品 | 久久黄色影院 | 偿还的影视高清在线观看 | 成人在线观看免费观看 | 亚洲男人的天堂在线视频 | 日韩黄色免费观看 | 亚洲欧美日韩一区二区三区在线观看 |