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

个人简历网站模板下载舆情分析报告案例

个人简历网站模板下载,舆情分析报告案例,科技产品,自己上传图片做动漫图网站接口与多态 何为接口 在面向对象的领域里,接口一般这样定义:接口定义一个对象的行为。接口只指定了对象应该做什么,至于如何实现这个行为(即实现细节),则由对象本身去确定。   在 Go 语言中,…

接口与多态

何为接口

  在面向对象的领域里,接口一般这样定义:接口定义一个对象的行为。接口只指定了对象应该做什么,至于如何实现这个行为(即实现细节),则由对象本身去确定。
  在 Go 语言中,接口就是方法签名(Method Signature)的集合。当一个类型定义了接口中的所有方法,我们称它实现了该接口。接口指定了一个类型应该具有的方法,并由该类型决定如何实现这些方法。

接口定义

  使用type关键字来定义接口
如下所示,定义了一个叫order的接口,接口要求必须实现printName方法

type order interface{printName()
}

接口的实现

如果有一个类型/结构体,实现了一个接口要求的所有方法,我们就可以称它实现了该接口。

接口实现多态

  一个接口,在不同对象上的不同表现。这就是多态。在 Go 语言中,是通过接口来实现的多态。

package mainimport ("fmt""strconv"
)//定义一个接口
type order interface{countmoney() intpaymoney() string
}type hamburger struct{name stringquantity intprice int
}func (ham hamburger) countmoney() (int){return ham.quantity*ham.price
}func (ham hamburger) paymoney() (string){//strconv.Itoa() 可以将数字转换成对应的字符串类型的数字。return "所购买的" + strconv.Itoa(ham.quantity) + "个"+ham.name+"共计:" + strconv.Itoa(ham.countmoney()) + "元" 
}type roastrice struct{name stringquantity int  price int
}func (roa roastrice) countmoney() (int){return roa.quantity*roa.price
}func (roa roastrice) paymoney() (string){return "所购买的" + strconv.Itoa(roa.quantity) + "个"+roa.name+"共计:" + strconv.Itoa(roa.countmoney()) + "元" 
}func calaulateSum(orders []order)(int){var sumPrice intfor _,now := range orders{fmt.Println(now.paymoney())sumPrice += now.countmoney()}return sumPrice
}func main(){ham := hamburger{"烤鸡汉堡",2,18,}rice := roastrice{"烤饭",5,2,}orders := []order{ham,rice}sumPrice := calaulateSum(orders)fmt.Printf("这顿饭共计%d元",sumPrice)
}

在这里插入图片描述

接口使用的注意事项

1.方法调用的限制

接口是一组固定的方法集,由于静态类型的限制,接口变量有时仅能调用其中特定的一些方法。
下面这段代码会报错


type Phone interface{call()
}type iPhone struct{name string
}func (ipone iPhone) call(){fmt.Println("Hello iPhone.")
}func (iphone iPhone) send_wechat(){fmt.Println("Hello Wechat")
}func main(){var phone Phonephone = iPhone{"xin's iphone"}phone.call()phone.send_wechat()
}

提示我们 Phone 类型的方法没有 send_wechat 的字段或方法。
在这里插入图片描述
原因也很明显,因为我们的phone对象显式声明为 Phone 接口类型,因此 phone调用的方法会受到此接口的限制。
修改方法:隐式实现 Phone 接口,如此一来,方法的调用就不会受到接口类型的约束。

	/* var phone Phonephone = iPhone{"xin's iphone"} */phone := iPhone{"xin's iphone"}phone.call()phone.send_wechat()

2.调用函数时的隐式转换

Golang 语言中的函数调用都是值传递的,变量会在方法调用前进行类型转换。
eg:下面一段是可以正常运行的代码

func printTpe(i interface{}){switch i.(type){case int:fmt.Println("参数的类型是 int")case string:fmt.Println("参数的类型是 string")}
}func main(){a:=10printTpe(a)
}

但是如果你把函数内的内容搬到到外面来

func main(){a:=10switch a.(type){case int:fmt.Println("参数的类型是 int")case string:fmt.Println("参数的类型是 string")}
}

报错:
在这里插入图片描述
当一个函数接口 interface{} 空接口类型时,我们说它可以接收什么任意类型的参数(江湖上称之为无招胜有招)。就是把传入函数的参数值(注意:Go 语言中的函数调用都是值传递的)的类型隐式的转换成 interface{} 类型。
所以要想不通过接收空接口类型的函数进行类型判断,我们需要进行显示转换

func main(){a:=10switch interface{}(a).(type){case int:fmt.Println("参数的类型是 int")case string:fmt.Println("参数的类型是 string")}
}
http://www.ds6.com.cn/news/111742.html

相关文章:

  • 做b2b网站的公司seo推广培训班
  • 新网站建设平台seo课程总结怎么写
  • 查找北京建设投标项目网站营销网络怎么写
  • 东莞哪里可以学网络营销常州网站优化
  • 网站建设应计入哪个会计科目百度热搜关键词排行榜
  • 去哪个网站做兼职seo搜索排名优化公司
  • 山东饰品行业网站开发杭州百度快照优化公司
  • 牛商网做网站多少钱seo1短视频网页入口营销
  • 娄底企业网站建设制作邢台市seo服务
  • 做网站的公司多少钱百度发视频步骤
  • 旅游网站建设与网页设计百度云电脑网页版入口
  • 惠州做棋牌网站建设seo商城
  • 网站怎么做关键词优化百度搜索引擎的功能
  • 汕头市企业网站建设服务机构seo关键词排名优化技巧
  • 南宁 网站建设seo整站优化方案案例
  • 高端网站建设网站长沙seo优化哪家好
  • 网站开发流程培训机构排名全国十大教育机构排名
  • 免费建设网站百度整站优化
  • 温州网站策划迅雷bt磁力链 最好用的搜索引擎
  • 手机百度 网站提交金华网站建设
  • 建设信用卡积分兑换商城网站seo兼职怎么收费
  • 云南建设学校网站首页重庆seo网络推广
  • 长沙做网站推荐宁波网络推广seo软件
  • 找网络公司做的网站可以出售吗女生学网络营销这个专业好吗
  • 可以做策略回测的网站360竞价推广登录入口
  • 手机网站和网站一体百度站长工具抓取诊断
  • 网站做移动端seo高手培训
  • 网站建设的总体设计概图网站排名系统
  • 用mockplus做网站原型域名注册购买
  • 广东网站建设哪家专业体验式营销案例