Go语言中 接口的理解和实现细节 以及最佳实践 (Golang经典编程案例)
2019-07-01 16:09
741 查看
接口概念:interface类型可以定义一组方法,但是这些不需要实现。并且interface不能包涵任何变量。到某个自定义类型要使用的时候,再根据具体情况把这些方法写出来(实现)。
注意:
- 接口里所有方法都没有方法体,即接口的方法都是没有实现的方法。接口体现了程序设计的多态和高内聚低耦合的思想。
- Golang中的接口,不需要显示的实现。只要一个变量,含有接口类型的所有方法,那么这个变量就实现这个接口 。因此,Golang中没有implement这样的关键字。
- interface类型默认是一个指针(引用类型),如果没有对interface初始化就使用,那么就会输入nil。
- 空接口:interfaceI() 没有任何方法,所有类型都实现了空接口,即我们可以把任何一个变量赋给空接口。
sort.Sort(data Interface) 接口:
最佳实践:比如要对Hero结构体切片进行排序:代码如下:
package main import ( "sort" "fmt" "math/rand" ) //1.声明Hero结构体 type Hero struct { Name string Age int } //2.声明一个Hero结构体切片类型 type HeroSlice []Hero //3.实现 sort.Sort(data Interface) 接口 func (hs HeroSlice) Len() int{ return len(hs) } //Less方法就是决定你使用什么标准进行排序 func (hs HeroSlice) Less(i, j int) bool { return hs[i].Age < hs[j].Age //修改成对Name排序 //return hs[i].Name < hs[j].Name } func (hs HeroSlice) Swap(i, j int) { //交换 //temp := hs[i] //hs[i] = hs[j] //hs[j] = temp //下面一句话等价于上面三句话 hs[i], hs[j] = hs[j], hs[i] } //声明Student结构体 type Student struct { Name string Age int Score float64 } func main() { //定义一个数组切片 var intSlice = []int{7, -3, 20, 5 ,16} fmt.Println("当前数组为:", intSlice) //对intSlice切片进行排序 sort.Ints(intSlice) fmt.Println("排序之后的数组为:", intSlice) //对结构体切片进行排序 var heroes HeroSlice for i := 0; i < 6; i++ { hero := Hero{ Name:fmt.Sprintf("英雄xx:%d", rand.Intn(100)), Age:rand.Intn(100), } //将hero append 到 heroes 切片 heroes = append(heroes, hero) } //排序前的顺序 for 21146 _, v := range heroes { fmt.Printf("英雄[编号:%v,年龄:%v] \n",v.Name, v.Age) } sort.Sort(heroes) fmt.Println("--------排序后--------") for _, v := range heroes { fmt.Printf("英雄[编号:%v,年龄:%v] \n",v.Name, v.Age) } }
执行结果如下图所示:
相关文章推荐
- 领悟Java编程思想:经典案例源代码最佳实践
- 一个Go语言接口和多操作系统实现的简单例子
- golang接口的实现以及注意事项。
- 算法代码实现之二分法查找,Golang(Go语言)实现
- Go语言中的函数式编程实践
- Go语言最佳实践—— 字符串
- Java 安全套接字编程以及 keytool 使用最佳实践
- Java 安全套接字编程以及keytool 使用最佳实践
- 深入理解Android网络编程:技术详解与最佳实践pdf
- R语言机器学习1:用案例理解朴素贝叶斯以及R语言的实现——(part1)
- 产品环境中 Go 语言的最佳实践
- 产品环境中 Go 语言的最佳实践
- Go语言入门(一)——接口的实现
- 一份非常不错的Go语言安装配置以及编程手册
- 排列和组合算法的实现方法_C语言经典案例
- Go实战--golang中各种排序算法实现以及生成随机数
- c语言接口与实现--第11章序列理解
- golang自定义路由控制实现(二)-流式注册接口以及支持RESTFUL
- golang语言渐入佳境[19]-从go源代码读懂interface接口
- Go语言中接口的定义与实现