2018-07-20 14:23:02 1884瀏覽
最近扣丁學(xué)堂上線區(qū)塊鏈培訓(xùn)課程,包括從入門到精通、GO語(yǔ)言等課程內(nèi)容,有很多學(xué)員反映出一個(gè)問題對(duì)于Interface接口的使用不知道怎么解決,老師根據(jù)學(xué)員的需求編寫成了一篇文章,現(xiàn)在分享給大家,下面我們一起來(lái)看一下吧。
type Interface_Name interface { method_a() string method_b() int .... }
package main import "fmt" type USB interface { //定義一個(gè)接口:方法的集合 Name() string //Name方法,返回string Connect() //Connect方法 } type PhoneConnecter struct { //定義一個(gè)結(jié)構(gòu) name string //結(jié)構(gòu)包含一個(gè)字段 } func (pc PhoneConnecter) Name() string { //為結(jié)構(gòu)定義一個(gè)方法,綁定接口 return pc.name //該方法命名為接口內(nèi)的字段 } //返回結(jié)構(gòu)體字段 func (pc PhoneConnecter) Connect() { //定義結(jié)構(gòu)體另一個(gè)方法,與接口另一個(gè)方法綁定 fmt.Println("Connect:", pc.name) } func main() { var a USB //定義一個(gè)變量為USB接口類型 a = PhoneConnecter{"PhoneConnecter"} //實(shí)例化一個(gè)結(jié)構(gòu)體,并賦值給變量(接口)USB a.Connect() //接口調(diào)用其Connect方法,也是結(jié)構(gòu)方法 } /*輸出 Connect: PhoneConnecter */
接口可以作為匿名嵌入其它接口,或嵌入到結(jié)構(gòu)中
package main import "fmt" type USB interface { //定義一個(gè)接口:方法的集合 Name() string //Name方法,返回string Connecter //嵌入Connecter接口,可以使用Connecter方法 } type Connecter interface { //定義另一個(gè)接口 Connecter Connect() //包含一個(gè)接口方法:Connect } type PhoneConnecter struct { //定義一個(gè)結(jié)構(gòu) name string //結(jié)構(gòu)包含一個(gè)字段 } func (pc PhoneConnecter) Name() string { //為結(jié)構(gòu)定義一個(gè)方法,綁定接口 return pc.name //該方法命名為接口內(nèi)的字段 } //返回結(jié)構(gòu)體字段 func (pc PhoneConnecter) Connect() { //定義結(jié)構(gòu)體另一個(gè)方法,與接口另一個(gè)方法綁定 fmt.Println("Connect:", pc.name) } func main() { var a USB //定義一個(gè)變量為USB接口類型 a = PhoneConnecter{"PhoneConnecter"} //實(shí)例化一個(gè)結(jié)構(gòu)體,并賦值給變量(接口)USB a.Connect() Disconnect(a) //接口調(diào)用其Connect方法,也是結(jié)構(gòu)方法 }
package main import "fmt" type USB interface { //定義一個(gè)接口:方法的集合 Name() string //Name方法,返回string Connecter //嵌入Connecter接口,可以使用Connecter方法 } type Connecter interface { //定義另一個(gè)接口 Connecter Connect() //包含一個(gè)接口方法:Connect } type PhoneConnecter struct { //定義一個(gè)結(jié)構(gòu) name string //結(jié)構(gòu)包含一個(gè)字段 } func (pc PhoneConnecter) Name() string { //為結(jié)構(gòu)定義一個(gè)方法,綁定接口 return pc.name //該方法命名為接口內(nèi)的字段 } //返回結(jié)構(gòu)體字段 func (pc PhoneConnecter) Connect() { //定義結(jié)構(gòu)體另一個(gè)方法,與接口另一個(gè)方法綁定 fmt.Println("Connected:", pc.name) } func main() { var a USB //定義一個(gè)變量為USB接口類型 a = PhoneConnecter{"htc M10"} //實(shí)例化一個(gè)結(jié)構(gòu)體,并賦值給變量(接口)USB a.Connect() Disconnect(a) //接口調(diào)用其Connect方法,也是結(jié)構(gòu)方法 } func Disconnect(usb USB) { if pc, ok := usb.(PhoneConnecter); ok { //傳入結(jié)構(gòu)體,判斷賦值是否成功 fmt.Println("Disconnected:", pc.name) return } fmt.Println("UNknown device.") } /*輸出 Connect: htc M10 Disconnect:htc M10 */
package main import "fmt" type USB interface { //定義一個(gè)接口:方法的集合 Name() string //Name方法,返回string Connecter //嵌入Connecter接口,可以使用Connecter方法 } type Connecter interface { //定義另一個(gè)接口 Connecter Connect() //包含一個(gè)接口方法:Connect } type PhoneConnecter struct { //定義一個(gè)結(jié)構(gòu) name string //結(jié)構(gòu)包含一個(gè)字段 } func (pc PhoneConnecter) Name() string { //為結(jié)構(gòu)定義一個(gè)方法,綁定接口 return pc.name //該方法命名為接口內(nèi)的字段 } //返回結(jié)構(gòu)體字段 func (pc PhoneConnecter) Connect() { //定義結(jié)構(gòu)體另一個(gè)方法,與接口另一個(gè)方法綁定 fmt.Println("Connected:", pc.name) } func main() { var a USB //定義一個(gè)變量為USB接口類型 a = PhoneConnecter{"htc M10"} //實(shí)例化一個(gè)結(jié)構(gòu)體,并賦值給變量(接口)USB a.Connect() Disconnect(a) //接口調(diào)用其Connect方法,也是結(jié)構(gòu)方法 } # func Disconnect(usb interface{}) { //集成空接口,也可以實(shí)現(xiàn) # if pc, ok := usb.(PhoneConnecter); ok { //傳入結(jié)構(gòu)體,判斷賦值是否成功 # fmt.Println("Disconnected:", pc.name) # return # } # fmt.Println("UNknown device.") # } //通過(guò)switch判斷接口類型:type...switch用法 func Disconnect(usb interface{}) { //集成空接口,也可以實(shí)現(xiàn) switch v := usb.(type) { case PhoneConnecter: fmt.Println("Disconnected:", v.name) default: fmt.Println("UNknown device.") } } /*輸出 Connect: htc M10 Disconnect:htc M10 */
... func main() { pc := PhoneConnecter{"ipad book pro"} //實(shí)例化一個(gè)結(jié)構(gòu) var a Connecter //定義a為接口變量 a = Connecter(pc) //接口強(qiáng)制轉(zhuǎn)換 a.Connect() pc.name = "Iphone 7" a.Connect() ... /*輸出 pc.name= "ipad book pro" Connected: ipad book pro pc.name = "Iphone 7" Connected: ipad book pro */ }
package main import "fmt" func main() { var a interface{} fmt.Println(a == nil) var p *int = nil a = p fmt.Println(a == nil) } /*輸出 true false */
【關(guān)注微信公眾號(hào)獲取更多學(xué)習(xí)資料】
查看更多關(guān)于“區(qū)塊鏈培訓(xùn)技術(shù)資訊”的相關(guān)文章>>