首页 文章 Go语言基础 Go语言中 接口的理解和实现细节 以及最佳实践 (Golang经典编程案例)
0
0
0
7

Go语言中 接口的理解和实现细节 以及最佳实践 (Golang经典编程案例)

接口(interface)与反射(reflect) 接口 细节 案例 语言 经典

接口概念:interface类型可以定义一组方法,但是这些不需要实现。并且interface不能包涵任何变量。到某个自定义类型要使用的时候,再根据具体情况把这些方法写出来(实现)。

注意

  1. 接口里所有方法都没有方法体,即接口的方法都是没有实现的方法。接口体现了程序设计的多态和高内聚低耦合的思想。
  2. Golang中的接口,不需要显示的实现。只要一个变量,含有接口类型的所有方法,那么这个变量就实现这个接口 。因此,Golang中没有implement这样的关键字。
  3. interface类型默认是一个指针(引用类型),如果没有对interface初始化就使用,那么就会输入nil。
  4. 空接口: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 _, 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)
	}
}

执行结果如下图所示:

到此这篇关于“Go语言中 接口的理解和实现细节 以及最佳实践 (Golang经典编程案例)”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持Go语言编程网!

相关文章

创建博客

开始创作
写作能提升自己能力,也能为他人分享知识。

在线教程

查看更多
  • Go入门指南

    Go入门指南

  • Go语言高级编程

    Go语言高级编程

  • Go Web 编程

    Go Web 编程

  • GO专家编程

    GO专家编程

  • Go语言四十二章经

    Go语言四十二章经

  • 数据结构和算法(Golang实现)

    数据结构和算法(Golang实现)

Go语言编程网

微信扫码关注订阅号


博客 资讯 教程 我的