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

网站关键字推广/百度一下你就知道官网网址

网站关键字推广,百度一下你就知道官网网址,做电商网站的参考书,免费做网站手机软件1 接口的定义与理解接口是一个自定义类型,它是一组方法的集合。从定义上来看,接口有两个特点。第一,接口本质是一种自定义类型,因此不要将golang中的接口简单理解为C/Java中的接口,后者仅用于声明方法签名。第二&#…

1 接口的定义与理解

接口是一个自定义类型,它是一组方法的集合。从定义上来看,接口有两个特点。第一,接口本质是一种自定义类型,因此不要将golang中的接口简单理解为C++/Java中的接口,后者仅用于声明方法签名。第二,接口是一种特殊的自定义类型,其中没有数据成员,只有方法(也可以为空)。

接口是完全抽象的,因此不能将其实例化。然而,可以创建一个其类型为接口的变量,它可以被赋值为任何满足该接口类型的实际类型的值。接口的重要特性是:

(1)只要某个类型实现了接口要的方法,那么我们就说该类型实现了此接口。该类型的值可以赋给该接口的变量;

(2)作为1的推论,任何类型的值都可以赋值给空接口interface{}

注意:这只是golang中接口的特性,为非所有类型的特性(接口是一种特殊的类型)。

接口的特性是golang支持鸭子类型的基础,即“如果它走起来像鸭子,叫起来像鸭子(实现了接口要的方法),它就是一只鸭子(可以被赋值给接口的值)”。凭借接口机制和鸭子类型,golang提供了一种游离于类、继承、模板之外的更加灵活强大的选择。

2 例子type Exchanger interface {

exchange()

}

type StringPair struct {

first, second string

}

type Point[2]int

func (sp *StringPair) exchange() {

sp.first, sp.second = sp.second, sp.first

}

func (p *Point) exchange() {

p[0], p[1] = p[1], p[0]

}

func exchangeThese(exchangers ...Exchanger) {

for _, exchanger := range exchangers {

exchanger.exchange()

}

}

func main() {

pair1 := StringPair{"abc","def"}

pair2 := StringPair{"ghi","jkl"}

point := Point{5, 7}

fmt.Println(pair1, pair2, point)

pair1.exchange()

pair2.exchange()

point.exchange()

fmt.Println(pair1, pair2, point)

// exchangeThese(pair1, pair2) //wrong

exchangeThese(&pair1, &pair2)

fmt.Println(pair1, pair2)

}

运行结果

Fjp83cMLyrffiYCOPjFD1523bnMY

在本例中,自定义类型StringPair和Point指针实现了接口Exchanger所需的方法,因此该类型的值可以被赋值给接口的值。

但是,特别注意一点。如果使用exchangeThese(pair1, pair2)会导致编译错误(如下图),正确写法应当是exchangeThese(&pair1, &pair2)。这是由于真正满足接口Exchanger的类型是StringPair指针,而非StringPair。

FmtBmcFixiYaaAUFsVLHpMFlUCR4

在golang中,值接收者和指针接收者的方法集是不同的。只是golang会智能地解引用和取引用,使得二者的方法集看上去是一样的。但是,在调用exchangeThese时,就凸显出二者的不同了。

本文出自 “说话的白菜” 博客,谢绝转载!

http://www.lbrq.cn/news/1425601.html

相关文章:

  • 衡水哪儿做网站便宜/刷排名的软件是什么
  • b2b和b2c平台/沧州seo公司
  • 30天网站建设实录下载/百度搜索关键词优化方法
  • 江门市外事侨务局网站党建设/上海网站快速排名优化
  • 北京做网站哪家便宜/企业网站建设流程
  • 如何申请企业邮箱免费/seo排名的影响因素有哪些
  • 江门公司网站建设/网上怎么推销自己的产品
  • 北京顺义网站建设/seo数据是什么意思
  • wordpress模板 微信/企业seo网站推广
  • 布吉做网站/seo公司服务
  • 网站标签怎么做跳转页面/做公司网页
  • 网站开发工程师符号代码/web网页制作成品免费
  • 泉州做网站公司/网络推广运营优化
  • 网站如何做排名靠前/关键词优化有哪些作用
  • 动态网站 教程/手机百度
  • 定制营销型网站公司/深圳百度推广联系方式
  • b2b2c网站系统建设/seo矩阵培训
  • wordpress视频教程 电驴/南昌百度seo
  • 小满crm/山东seo百度推广
  • 怎么免费建设金融网站/制定营销推广方案
  • 哪里可以做网站/哪家公司做推广优化好
  • 网站什么认证对做电商好/搜索引擎优化的方法包括
  • 做众筹网站要什么资质/线上线下一体化营销
  • 免费的行情网站app软件推荐/今天的三个新闻
  • 武汉公司网站推广/新乡网站优化公司推荐
  • 如何做品牌网站设计/福州短视频seo平台
  • 在线制作图片美图/网站排名优化查询
  • 外贸网站推广收费/百度官网首页登录
  • 网站域名续费/搜索引擎下载入口
  • 建设公司网站源码/优化大师优化项目有
  • 力扣(LeetCode) ——142. 环形链表 II(C语言)
  • 开源 Arkts 鸿蒙应用 开发(十七)通讯--http多文件下载
  • tailscale远程服务器连接局域网方案(解决境外服务器网速慢的问题)
  • Linux系统编程—Linux基础指令
  • 【C++】缺省参数
  • 【Canvas与玻璃光】铝圈蓝底玻璃光按钮