第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Go method 指向receiver,指針或是本身怎么樣效果一樣?

Go method 指向receiver,指針或是本身怎么樣效果一樣?

慕桂英3389331 2019-04-08 11:19:15
代碼在這里:http://play.golang.org/p/koMmlbmwYk代碼:packagemainimport"fmt"typeHumanstruct{namestringageintphonestring}typeStudentstruct{Human//匿名字段schoolstring}typeEmployeestruct{Human//匿名字段companystring}//Human定義methodfunc(h*Human)SayHi(){fmt.Printf("Hi,Iam%syoucancallmeon%s\n",h.name,h.phone)}//Employee的method重寫Human的methodfunc(e*Employee)SayHi(){fmt.Printf("Hi,Iam%s,Iworkat%s.Callmeon%s\n",e.name,e.company,e.phone)//Yesyoucansplitinto2lineshere.}funcmain(){mark:=Student{Human{"Mark",25,"222-222-YYYY"},"MIT"}sam:=Employee{Human{"Sam",45,"111-888-XXXX"},"GolangInc"}mark.SayHi()sam.SayHi()}對于這句://Human定義methodfunc(h*Human)SayHi(){fmt.Printf("Hi,Iam%syoucancallmeon%s\n",h.name,h.phone)}//Employee的method重寫Human的methodfunc(e*Employee)SayHi(){fmt.Printf("Hi,Iam%s,Iworkat%s.Callmeon%s\n",e.name,e.company,e.phone)//Yesyoucansplitinto2lineshere.}receiver是指向Houman的指針,但如果我改成這樣://Human定義methodfunc(hHuman)SayHi(){fmt.Printf("Hi,Iam%syoucancallmeon%s\n",h.name,h.phone)}//Employee的method重寫Human的methodfunc(eEmployee)SayHi(){fmt.Printf("Hi,Iam%s,Iworkat%s.Callmeon%s\n",e.name,e.company,e.phone)//Yesyoucansplitinto2lineshere.}針向本身,結(jié)果輸出效果是一樣的。這是怎么回事呢?
查看完整描述

2 回答

?
一只斗牛犬

TA貢獻1784條經(jīng)驗 獲得超2個贊

不是這樣理解的
首先要區(qū)分好函數(shù)和方法
方法定義:有接受者的函數(shù)叫做方法
至于使用函數(shù)還是方法完全是由程序員自己決定的,但是如果想要滿足接口(interface{})就只能使用方法,如果沒有這方面的需求,那你就使用函數(shù)吧
go本身就有這個隱式轉(zhuǎn)換特性,如:
如果t可以獲取地址,并且&t的方法中包含d,那么t.d()是(&t).d()的更短寫法
工作原理:go首先會查找T類型的變量t的方法列表(看有沒有d方法),如果沒有找到就會再查找*T類型的方法列表,如果有,會自動轉(zhuǎn)化為(&t).d(),這也是go的一個重要特性
                            
查看完整回答
反對 回復 2019-04-08
  • 2 回答
  • 0 關(guān)注
  • 354 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號