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

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

在 Go 中將函數轉換為另一種類型(函數轉換)

在 Go 中將函數轉換為另一種類型(函數轉換)

Go
HUWWW 2021-07-28 15:38:40
我最近了解到在net/http包中,有一種使用模式讓我最困惑。它是函數類型轉換。它是這樣的:(function a) ->convert to-> (type t)(type t) ->implentments-> (interface i)所以,如果有一個函數以接口i為參數,它會調用函數a,這就是net/http它的實現方式。但是當我編寫自己的代碼時,我對這種模式有很多誤解。我的代碼是這樣的:package mainimport (    "fmt")type eat interface {    eat()}type aaa func()func (op *aaa) eat() {//pointer receiver not right    fmt.Println("dog eat feels good")}///////////////////////////////////////////////func dog() {    fmt.Println("I'm a dog")}///////////////////////////////////////////////func feelsGood(a eat) {    a.eat()}func main() {    b := aaa(dog)    feelsGood(b)}//error:aaa does not implement eat (eat method has pointer receiver)類型aaa有方法eat,函數名和參數簽名一樣,符合接口eat的規則,但是為什么會報錯呢?接收器重要嗎?另一個問題是只有一個函數和類型,不包括接口,代碼是這樣的:package mainimport (    "fmt")type aaa func()func (op *aaa) eat() {    op()}///////////////////////////////////////////////func dog() {    fmt.Println("I'm a dog")}///////////////////////////////////////////////func main() {    obj:=aaa(dog)    obj.eat()}//error:cannot call non-function op (type *aaa)第一,是op匿名函數,不管錯誤?其次,刪除星號后效果很好,但為什么呢?op是類型的實例aaa,接收者是op,是否op代表函數狗()?http包的使用方式f(w,r)也是一樣的,只是有點難懂。是op類型、實例還是匿名函數?看來我對函數轉換的理解不太對,不過我也查了很多google的帖子,沒有一個能教我如何思考和正確使用,謝謝!
查看完整描述

2 回答

  • 2 回答
  • 0 關注
  • 291 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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