接口概念:interface类型可以定义一组方法,但是这些不需要实现。并且interface不能包涵任何变量。到某个自定义类型要使用的时候,再根据具体情况把这些方法写出来。
注意:
接口里所有方法都没有方法体,即接口的方法都是没有实现的方法。接口体现了程序设计的多态和高内聚低耦合的思想。Golang中的接口,不需要显示的实现。只要一个变量,含有接口类型的所有方法,那么这个变量就实现这个接口。Golang中没有implement这样的关键字。interface类型默认是一个指针,如果没有对interface初始化就使用,那么就会输入nil。空接口:interfaceI()没有任何方法,所有类型都实现了空接口,即我们可以把任何一个变量赋给空接口。
sort.Sort(dataInterfac接口:最佳实践:比如要对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]
',v.Name, v.Age)
}
sort.Sort(heroes)
fmt.Println('--------排序后--------')
for _, v := range heroes {
fmt.Printf('英雄[编号:%v,年龄:%v]
',v.Name, v.Age)
}
}
文章为作者独立观点,不代表股票交易接口观点