接口基础操作
package main
import(
"fmt"
)
//声明接口
type Usb interface{
//声明需要实现的方法
//方法名(参数列表)返回值列表
start()
stop()
}
//接口执行工作
type Working struct{
}
func (Working Working) GetWorking(usb Usb){
usb.start()
usb.stop()
}
//方法实现start 和 stop 方法
type Phone struct{
}
func (phone Phone) start(){
fmt.Println("手机连接开始。。。")
}
func (phone Phone) stop(){
fmt.Println("手机链接结束。。。")
}
type Computer struct{
}
func (computer Computer) start(){
fmt.Println("电脑连接开始。。。")
}
func (computer Computer) stop(){
fmt.Println("电脑链接结束。。。")
}
func main(){
working := Working{}
phone := Phone{}
computer := Computer{}
//方法以形参的方式传入GetWorking中
working.GetWorking(phone)
working.GetWorking(computer)
/*
手机连接开始。。。
手机链接结束。。。
电脑连接开始。。。
电脑链接结束。。。
*/
}
注意事项
1.生成接口内不可以写属性(字段)
2.在继承多个接口时 父级接口中不可以有俩个相同的方法
接口案例:
package main
import(
"fmt"
)
//声明一个结构体
type Monkey struct{
Name string
}
func (this Monkey) climbing(){
fmt.Println(this.Name," 生来就会爬树。。")
}
//继承Monkey
type LittleMonkey struct{
Monkey
}
//接口
type FlyAble interface{
Flying()
}
//实现接口方法
func (this *LittleMonkey) Flying(){
fmt.Println(this.Name," 努力学会了飞翔。。")
}
type FishAble interface{
FishAble()
}
func (this *LittleMonkey) FishAble(){
fmt.Println(this.Name," 努力又学会了游泳。。")
}
func main(){
//创建一个实例
LittleMonkey := LittleMonkey{
Monkey{
Name:"tom",
},
}
// LittleMonkey.Monkey.Name = "tom"
//调用继承得climbing()的方法
LittleMonkey.climbing()
LittleMonkey.Flying()
LittleMonkey.FishAble()
/*
结果
many 生来就会爬树。。
many 努力学会了飞翔。。
many 努力又学会了游泳。。
*/
}
接口sort案例:
package main
import(
"fmt"
"math/rand"
"sort"
)
type Student struct{
Name string
Age int
Score float64
}
type HeroSlice []Student
//切片数量
func (hs HeroSlice) Len() int{
return len(hs)
}
//排序规则
func (hs HeroSlice) Less(i, j int) bool{
return hs[i].Score > hs[j].Score
}
//数据对换
func (hs HeroSlice) Swap(i, j int){
hs[i],hs[j] = hs[j],hs[i]
}
func main(){
//添加切片数据
var stu HeroSlice
for i:= 0; i < 10; i++{
//给结构体添加数据
stu1 := Student{
Name : fmt.Sprintf("tom~%d",rand.Intn(100)),
Age : rand.Intn(100),
Score : float64(i+1) + 0.1,
}
stu = append(stu,stu1)
}
for _,v := range stu{
fmt.Println(v)
}
sort.Sort(stu)
fmt.Println("排序后结果---------")
for _,v := range stu{
fmt.Println(v)
}
/*
结果:
{tom~81 87 1.1}
{tom~47 59 2.1}
{tom~81 18 3.1}
{tom~25 40 4.1}
{tom~56 0 5.1}
{tom~94 11 6.1}
{tom~62 89 7.1}
{tom~28 74 8.1}
{tom~11 45 9.1}
{tom~37 6 10.1}
排序后结果---------
{tom~37 6 10.1}
{tom~11 45 9.1}
{tom~28 74 8.1}
{tom~62 89 7.1}
{tom~94 11 6.1}
{tom~56 0 5.1}
{tom~25 40 4.1}
{tom~81 18 3.1}
{tom~47 59 2.1}
{tom~81 87 1.1}
*/
}