中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

常德網(wǎng)站seo百度收錄官網(wǎng)

常德網(wǎng)站seo,百度收錄官網(wǎng),商城網(wǎng)站建設(shè)天軟科技,中國國際進口博覽會上海文章目錄 duck typingnil不一定是空接口組合代替繼承接口轉(zhuǎn)換回具體的類型使用switch匹配接口的原始類型 duck typing golang中實現(xiàn)某個接口不需要像其它語言使用 implemet 去繼承實現(xiàn),而是只要你的結(jié)構(gòu)體包含接口所需的方法即可 package mainimport "fmt&qu…

文章目錄

        • duck typing
        • nil不一定是空接口
        • 組合代替繼承
        • 接口轉(zhuǎn)換回具體的類型
        • 使用switch匹配接口的原始類型

duck typing

golang中實現(xiàn)某個接口不需要像其它語言使用 implemet 去繼承實現(xiàn),而是只要你的結(jié)構(gòu)體包含接口所需的方法即可

package mainimport "fmt"type Person interface {talk()
}type XM struct {
}func (receiver XM) talk() {fmt.Println("I am XM")
}func main() {var p Personp = XM{}p.talk() // I am XM
}

nil不一定是空接口

初始化的接口是等于 nil的,接口底層其實有一個type來記錄原始的struct,當某個struct賦值給接口時,接口會在type中記錄該類型(就算是nil也會記錄),此時接口打印出來是nil,但和nil并不相等

}type XM struct {
}func (X XM) talk() {fmt.Println("I am XM")
}func main() {var p Personif p == nil {fmt.Println("var p Person is nil") //var p Person is nil}var a *XMif a == nil {fmt.Println("var a *XM is nil") //var a *XM is nil}p = aif p != nil {fmt.Println("var p != nil") //var p != nil}fmt.Println(p) // <nil>
}

組合代替繼承

通過內(nèi)嵌組合來繼承功能,XM匿名內(nèi)嵌了Person,就具有了Person的能力

package mainimport "fmt"type Person struct {Name string
}func (receiver Person) Talk() {fmt.Printf("I am %s \n", receiver.Name)
}type XM struct {Person
}func main() {var xm XMp := Person{Name: "Person"}xm.Name = "XM"xm.Talk() // I am XMp.Talk()  // I am Person
}

重寫方法只需要聲明一個同名方法即可

package mainimport "fmt"type Person struct {Name string
}func (receiver Person) Talk() {fmt.Printf("I am %s \n", receiver.Name)
}type XM struct {Person
}func (receiver XM) Talk() {fmt.Printf("hello,I am %s", receiver.Name)
}func main() {var xm XMxm.Name = "XM"xm.Talk() // hello,I am XM
}

接口轉(zhuǎn)換回具體的類型

struct 轉(zhuǎn)為接口,只要struct 擁有 接口的方法,即可將struct 賦值給接口,如果想將接口轉(zhuǎn)回struct,可以使用 result,ok := interface.(struct), ok 代表是否能夠成功轉(zhuǎn)換

package mainimport "fmt"type IAnimal interface {Eat()
}type Bridge struct {
}func (b Bridge) Eat() {fmt.Println("I can eat")
}func (b Bridge) Fly() {fmt.Println("I can fly")
}type Fish struct {
}func (f Fish) Eat() {fmt.Println("I can eat")
}func ShowTime(animal IAnimal) {animal.Eat()if b, ok := animal.(Bridge); ok {b.Fly()}
}func main() {var (f Fishb Bridge)ShowTime(f) // I can eatfmt.Println("--------------")ShowTime(b) // I can eat \n I can fly
}

ok 判斷的是完全轉(zhuǎn)換,就算不ok,轉(zhuǎn)換后的結(jié)果也可以調(diào)用struct的方法,但是不建議這么做

package mainimport "fmt"type IAnimal interface {Eat()
}type Bridge struct {Name string
}func (b Bridge) Eat() {fmt.Println(b.Name + "I can eat")
}func (b Bridge) Fly() {fmt.Println(b.Name + "I can fly")
}type Fish struct {Name string
}func (f Fish) Eat() {fmt.Println(f.Name + "I can eat")
}func ShowTime(animal IAnimal) {animal.Eat()b, ok := animal.(Bridge)fmt.Println(ok)b.Fly()
}func main() {f := Fish{Name: "fish"}b := Bridge{Name: "bridge"}ShowTime(f)// fishI can eat// false// I can flyfmt.Println("--------------")ShowTime(b)//bridgeI can eat// true//bridgeI can fly
}

使用switch匹配接口的原始類型

struct.(type) 可以獲取接口的原始類型,但是只能在switch中使用

package mainimport "fmt"type IAnimal interface {Eat()
}type Bridge struct {Name string
}func (b Bridge) Eat() {fmt.Println(b.Name + "I can eat")
}func (b Bridge) Fly() {fmt.Println(b.Name + "I can fly")
}type Fish struct {Name string
}func (f Fish) Eat() {fmt.Println(f.Name + "I can eat")
}func ShowTime(animal IAnimal) {switch animal.(type) {case Fish:fmt.Println("原先是Fish")case Bridge:fmt.Println("原先是Bridge")}
}func main() {var (f Fishb Bridge)ShowTime(f) // 原先是FishShowTime(b) // 原先是Bridge
}
http://www.risenshineclean.com/news/52485.html

相關(guān)文章:

  • 網(wǎng)站創(chuàng)建風格網(wǎng)站優(yōu)化排名哪家性價比高
  • 行業(yè)網(wǎng)站渠道選擇和內(nèi)容運營免費二級域名生成網(wǎng)站
  • 網(wǎng)站建設(shè)的技術(shù)需要多少錢下載百度網(wǎng)盤
  • 推廣網(wǎng)站利潤推廣普通話的意義是什么
  • 公司網(wǎng)站建設(shè)宣傳杭州網(wǎng)站seo推廣
  • 義烏網(wǎng)站建設(shè)微信開發(fā)2023年6月份疫情嚴重嗎
  • 微網(wǎng)站模板建設(shè)編程培訓機構(gòu)排名前十
  • wordpress網(wǎng)站怎么打開資源網(wǎng)站快速優(yōu)化排名
  • 公司網(wǎng)站封面怎么做搜索引擎優(yōu)化的具體操作
  • 政協(xié)網(wǎng)站建設(shè)方案seo北京優(yōu)化
  • 網(wǎng)上哪些網(wǎng)站可以做兼職湖北seo
  • b2c十大平臺排名seo是搜索引擎營銷嗎
  • 桂平做網(wǎng)站公司百度seo怎么提高排名
  • 微信小程序開發(fā)網(wǎng)站谷歌瀏覽器官方app下載
  • 工作站seo云優(yōu)化是什么意思
  • 網(wǎng)站怎么做友情鏈接河南seo網(wǎng)站多少錢
  • 網(wǎng)站制作公司網(wǎng)站建設(shè)海外seo網(wǎng)站推廣
  • 高級營銷網(wǎng)站建設(shè)只需1200元營銷推廣的方法有哪些
  • 做招生網(wǎng)站軟文推廣例子
  • 做幼兒園成長冊的素材網(wǎng)站軟文發(fā)布平臺排名
  • 國外設(shè)計網(wǎng)站d百度官方網(wǎng)站首頁
  • 響應(yīng)式網(wǎng)站源碼快速收錄工具
  • 進入網(wǎng)站服務(wù)器怎么做青島關(guān)鍵詞優(yōu)化平臺
  • 蘇州企業(yè)網(wǎng)站設(shè)計注冊網(wǎng)站多少錢
  • 如何搭建電子商務(wù)平臺佛山做seo推廣公司
  • 西部數(shù)碼個人網(wǎng)站seo實戰(zhàn)培訓學校
  • 娛樂網(wǎng)站建設(shè)淄博網(wǎng)站制作優(yōu)化
  • 信管女生做網(wǎng)站開發(fā)百度集團
  • 泉州企業(yè)自助建站促銷策略的四種方式
  • php動態(tài)網(wǎng)站開發(fā)教學設(shè)計360網(wǎng)站安全檢測