go 接口

go 接口

go接口定义

接口类型由数个方法组成

    type 接口名 interface{
        方法名(参数)返回值列表
    }

go使用接口

package main

import "fmt"

type USB interface {
	read()
	write()
}
type file struct {
}

func (f *file) read() {
	fmt.Printf("read")
}
func (f *file) write() {
	fmt.Println("write")
}
func main() {
	f := new(file)
	usb := f
	usb.write()
}

这是一个完整的使用接口进行结构体方法的使用

接口被实现的条件一:接口的方法与实现接口的类型方法格式一致
接口被实现的条件二:接口中所有方法均被实现
当我们在接口中定义了多个方法,这些方法必须全部被实现,此接口才有效

一个类型可以实现多个接口,接口和接口之间的实现并无任何关系
一个接口也可以由多个类型来实现

go语言类型断言

value, ok := x.(T)

x是接口 T是类型

  1. 如果T是具体的类型,类型断言会检查 x 的动态类型是否等于具体类型 T。如果检查成功,类型断言返回的结果是 x 的动态值,其类型是 T。
  2. 如果 T 是接口类型,类型断言会检查 x 的动态类型是否满足 T。如果检查成功,x 的动态值不会被提取,返回值是一个类型为 T 的接口值。
  3. 无论 T 是什么类型,如果 x 是 nil 接口值,类型断言都会失败。

go排序

一个内置的排序算法需要知道三个东西:序列的长度,表示两个元素比较的结果,一种交换两个元素的方式;这就是 sort.Interface 的三个方法:

package sort
type Interface interface {
    Len() int            // 获取元素数量
    Less(i, j int) bool // i,j是序列元素的指数。
    Swap(i, j int)        // 交换元素
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vqVqmaxl-1654346493016)(media/16543129843060/16543445623842.jpg)]

这些是简化过的方法,不过对于foat32,float64,int64之类的类型,sort包还没有实现,我们就可以根据sort.Interface来自己实现

package main

import (
	"fmt"
	"sort"
)

type MyStringList []float32

func (m MyStringList) Len() int {
	return len(m)
}
func (m MyStringList) Less(a, b int) bool {
	return m[a] < m[b]
}
func (m MyStringList) Swap(a, b int) {
	m[a], m[b] = m[b], m[a]
}
func main() {
	names := MyStringList{
		1.2,
		2.3,
		3.4,
		4.5,
	}
	// 使用sort包进行排序
	sort.Sort(names)
	// 遍历打印结果
	for _, v := range names {
		fmt.Printf("%.2f\n", v)
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值