当前位置: 首页 > news >正文

厦门有什么网站设计公司昆明城乡和住房建设局网站

厦门有什么网站设计公司,昆明城乡和住房建设局网站,公司网络营销推广方案设计,专业集团门户网站建设服务商文章目录 duck typingnil不一定是空接口组合代替继承接口转换回具体的类型使用switch匹配接口的原始类型 duck typing golang中实现某个接口不需要像其它语言使用 implemet 去继承实现,而是只要你的结构体包含接口所需的方法即可 package mainimport "fmt&qu…

文章目录

        • duck typing
        • nil不一定是空接口
        • 组合代替继承
        • 接口转换回具体的类型
        • 使用switch匹配接口的原始类型

duck typing

golang中实现某个接口不需要像其它语言使用 implemet 去继承实现,而是只要你的结构体包含接口所需的方法即可

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

组合代替继承

通过内嵌组合来继承功能,XM匿名内嵌了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
}

接口转换回具体的类型

struct 转为接口,只要struct 拥有 接口的方法,即可将struct 赋值给接口,如果想将接口转回struct,可以使用 result,ok := interface.(struct), ok 代表是否能够成功转换

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 判断的是完全转换,就算不ok,转换后的结果也可以调用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.yayakq.cn/news/679603/

相关文章:

  • 网站开发可能存在的困难wordpress移动端顶部菜单
  • 做童装在哪个网站做广告建德网站建设公司
  • 对做的网站的改进建议21ic中国电子网
  • 网站制作实验报告怎么做网站背景图
  • 哪公司建设网站随州网站设计开发方案
  • 咸阳网站建设培训中国企业500强厉害吗
  • 兰州做网站维护的公司注册网站域名
  • 网站普查建设背景网站建设项目预算表
  • 建企业网站怎么收费支付宝小程序代理
  • 多语言站点有多少个小语种网站重庆网站建设红衫
  • 怎样开个人网站二次开发手册
  • 网站开发国际化ftp网站建设
  • 网站开发流程图解释含义创建网站的详细步骤
  • 2小时wordpress建站目前网络推广平台
  • 网站建设搜索优wordpress网站防采集
  • 汽车工厂网站建设wordpress固定链接
  • 网站建设需要摊销吗深圳市app制作公司
  • 青岛网站建设王道下拉強wordpress双语版
  • 淄博专业网站建设如何知道网站后台地址
  • 宿豫区城乡建设局网站wordpress标题前缀
  • 广西建设职业技术学院管理工程系网站2014考试前培训时间网络营销策划方案
  • 渭南定制网站建设公司上海seo课程
  • 怎么自己做导购网站软件开发培训学校软件开发课程内容
  • 惠州惠城网站建设昌江县住房和城乡建设网站
  • 外汇自动跟单网站开发室内设计展厅设计
  • 品牌网站建设大概费用网站建设站建设好吗
  • 宁波余姚网站建设房地产最新消息14号公告
  • 深圳网站建设 设计首选python能够做网站
  • 免费门户网站建设微网站建设市场分析
  • 医院双语网站建设的意义先做网站再付款 怎么回答