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

首頁 > 學院 > 開發設計 > 正文

從 Golang中 method has pointer receiverd 異常去理解interface機制

2019-11-10 19:33:28
字體:
來源:轉載
供稿:網友

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

method has pointer receiverd

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

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

運行以上代碼,會得到一個這樣的錯誤:

./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)

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

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

值類型的對象只有(t T) 結構的方法,雖然值類型的對象也可以調用(t *T) 方法,但這實際上是Golang編譯器自動轉化成了&t的形式來調用方法,并不是表明值類型的對象擁有該方法。

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

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

這就意味著指針類型的receiver 方法實現接口時,只有指針類型的對象實現了該接口。

對應上面的例子來說,只有&user實現了notifier接口,而user根本沒有實現該接口。所以上面代碼會報出這樣的異常。

notify method has pointer receiver

解決這個問題也很容易,直接使用&user去代替user調用方法即可:

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.}

希望我通過這個異常,更深入的了解了Golang的interface機制。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 在线播放视频一区二区 | 久久久久国产精品久久久久 | 亚洲第一页夜 | 在线99热 | 久草在线网址 | 免费网站看v片在线a | 久久久久久91 | 国产精品久久久久久久久久久久久久久久 | 特片网久久 | 欧美一级淫片免费视频黄 | 国产成人高清在线观看 | 中文字幕一二三区芒果 | 色婷婷久久久久久 | 特级毛片免费 | 国产成人综合在线观看 | 欧美一级高清免费 | 国产精品99久久久久久大便 | 日日操操 | 亚洲成人精品一区二区 | 精品一区二区久久久久 | 精品亚洲综合 | 色七七久久影院 | 国产99精品视频 | 欧美老外a级毛片 | av在线收看 | 久久精品中文字幕一区 | 少妇淫片免费一级毛片 | 欧美另类视频在线 | 欧美高清视频一区 | av不卡免费在线 | 色就色 综合偷拍区91网 | 久久人人97超碰国产公开结果 | 日本在线观看视频网站 | 国产高清美女一级毛片久久 | 91精品国产综合久久婷婷香蕉 | 亚洲精华液久久含羞草 | h视频在线免费观看 | 麻豆视频在线观看免费网站 | 欧美在线观看视频一区二区 | 久久久久久久久日本理论电影 | 麻豆91精品91久久久 |