首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

函数、过程、对象、方法解析之二:GO语言为对象添加方法与接口

在Go语言中,可以给任意类型(包括内置类型,但不包括指针类型)添加相应的方法,

例如:

1 type ByLength []string

2 func (s ByLength) Len() int {

3 return len(s)

4 }

5 func (s ByLength) Less(i, j int) bool {

6 return len(s[i]) > len(s[j])

7 }

8 func (s ByLength) Swap(i, j int) {

9 s[i], s[j] = s[j], s[i]

10 }

在这个例子中,我们定义了一个新类型ByLength,它和string没有本质不同,只是它为内置的string类型增加了三个新方法Len() Less() Swap()。 这样实现了ByLength后,三个方法也就实现了。也就是inteface 接口,接口就是一个方法签名的集合。所谓方法签名,就是指方法的声明,只要实现该接口定义的所有方法即可实现该接口。所以上面的三个过程实现了一个interface接口的功能。也就是说,类型通过实现一个接口的所有方法可以实现该接口,但上例子的接口是隐式的,没有明确的定义出来,这种隐式接口的实现可以出现在任何包中,无需提前准备。因此,也就无需在每一个实现上增加新的接口名称。

事实上,在GO的标准包内该接口是这样的,我们来看对应标准包sort.Sort的定义:

func sort.Sort

由此可以看到,正是Len() Less() Swap()三个方法构成了Sort 的 接口。

这里我们的侧重点还是放在函数、过程、对象、方法上,对象是受体即s;过程就是施加于对象的方法,即施加于s上的Len() Less() Swap()三个方法,这三个方法实现了对象s的长度、大小、位置的交换;方法即是函数,是解决问题的单元,是一组输入和输出的映射。整个过程当输入一组string后,通过过程(三个方法即接口),实现我们期望的目的。

不要只讲理论了,我们要达到自定义排序的功能,只还需下面的几行代码即可:

下面来实现一下:

11 func main() {

12 paixu := []string{"sdsd", "a", "dfdfdf","tffdgg","ewqqqfdf"}

13 sort.Sort(ByLength(paixu))

14 fmt.Println(paixu)

15 }

(上面的15行代码前还需导入两个包“fmt”“sort”)

输出结果:

输出结果

把string{"sdsd", "a", "dfdfdf","tffdgg","ewqqqfdf"}5个值按照长度的大小进行了排序,也就是实现了自定义排序的功能。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180317A1C3K200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券