go学习笔记-接口

接口

接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节。也就是说我们只关心接口实现了什么功能,不关心接口具体怎么实现的。
可能有些东西同学不太理解为什么要有接口,下面举个例子

package main

import "fmt"

type cat struct {}

type dog struct {}

func hit(c cat)  { //打猫 猫会叫
	fmt.Println("i am speaking")
}

func main() {
	c := cat{}
	d := dog{}
	hit(c)  //猫叫可以
	hit(d)  //狗叫会报错,想要狗叫还得实现另外一个方法
}

我们实现的hit函数,希望传cat dog类型的参数都行,这时候就要用到我们的接口了,下面看看如下代码

package main

import "fmt"

type cat struct {}

type dog struct {}

func (c cat)speak()  {
	fmt.Println("miao miao miao")
}

func (d dog)speak(){
	fmt.Println("wang wang wang")
}

type spaeker interface {
	speak()
}

func hit(animal spaeker)  { //打动物,动物会叫
	animal.speak()
}


func main() {
	c := cat{}
	d := dog{}
	hit(c)
	hit(d)
}

接口可以理解成,定义了一个规范(方法),该规范不管传入何结构体,只要该结构体定义了该方法都能调用。在举一个更容易理解的例子,比如公司发工资,各种职工的工资发放不一样,我们只要定义一个发工资的接口,然后把各种职工作为参数穿进去就行了。

空接口

空接口一般用作函数参数,他可以接收任何类型的参数,例如:

func printType(arge... interface{})  {
	for _ , v := range arge {
		fmt.Printf("%T\n",v)
	}
}

也经常用于map

var mp map[string]interface{}

mp的键是string类型,值可以是任何类型

posted @ 2021-08-03 11:36  warrens  阅读(41)  评论(0编辑  收藏  举报