GO接口

Go语言接口与切片实践
本文通过实例展示了Go语言中接口的使用方法,包括接口的定义、实现以及多态特性,同时介绍了如何使用切片进行数据排序,适用于希望深入了解Go语言高级特性的开发者。
package main

import (
	"fmt"
	"sort"
	"math/rand"
)

//接口不能包含变量,不能有方法的实现
type Usb interface{
	Start()
	Stop()
}

//Phone实现Usb接口
type Phone struct{

}

func (p Phone) Start() {
	fmt.Println("手机开始工作")
}
func (p Phone) Stop() {
	fmt.Println("手机停止工作")
}

//相机实现Usb接口
type Camera struct{

}

func (c Camera) Start() {
	fmt.Println("相机开始工作")
}

func (c Camera) Stop() {
	fmt.Println("相机停止工作")
}

type Computer struct{

}
func (c Computer) Working(usb Usb) {
	usb.Start()
	usb.Stop()
}

type Usb2 interface {
	Usb  //接口继承,要实现Usb2必须也要实现Usb的方法
	test()
}

type Student struct{
	Name string
	Age int
	Score float64
}

type StudentSlice []Student

//实现Interface接口
func(sl StudentSlice) Len() int {
	return len(sl)
}

func (sl StudentSlice) Less(i int, j int) bool {
	return sl[i].Score < sl[j].Score
}

func (sl StudentSlice) Swap(i int, j int) {
	//temp := sl[i]
	//sl[i] = sl[j]
	//sl[j] = temp
	//上面三行可以简写
	sl[i],sl[j] = sl[j],sl[i]
}

func main() {
	cp := Computer{}
	ca := Camera{}
	ph := Phone{}

	cp.Working(ca)
	cp.Working(ph)

	var usb Usb
	//usb.Start() //这样是不允许的

	usb = ca
	usb.Start();//这就可以

	var sl StudentSlice
	for i := 0; i < 10; i++ {
		stu := Student{
			Name: fmt.Sprintf("test|%d", rand.Intn(100)),
			Age: rand.Intn(100),
			Score: rand.Float64() * 100,
		}
		sl = append(sl, stu)
	}

	for _,v := range(sl) {
		fmt.Println(v)
	}
	fmt.Println("-------------------------")
	sort.Sort(sl) //排序后
	for _,v := range(sl) {
		fmt.Println(v) 
	}
}

转载于:https://my.oschina.net/u/729139/blog/2255281

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值