Go语言基础(9)

您所在的位置:网站首页 go语言的关键字是哪个 Go语言基础(9)

Go语言基础(9)

2024-07-11 15:57| 来源: 网络整理| 查看: 265

九、接口

接口是种类型,是一种特殊类型,规定了变量的一些方法

9.1、接口定义 type 接口名interface { 方法名1(参数1,参数2...)(返回值1,返回值2...) 方法名2(参数1,参数2...)(返回值1,返回值2...) ..... }

接口实现:一个变量如果实现了接口中规定的所有的方法,那么这个变量就实现了这个接口,可以称为这个接口类型的变量.

//定义一个接口,接口内有speak方法 type speaker interface { speak() } type cat struct{} type dog2 struct{ name string } type person2 struct{} func (c cat) speak() { fmt.Println("喵喵喵~") } func (d dog2) speak() { fmt.Printf("%s叫:旺旺旺~\n",d.name) } func (p person2) speak() { fmt.Println("啊啊啊~ ") } func da(x speaker) { //接收一个参数,只要是实现了speaker接口下的所有方法的都可以接收 x.speak() } func main() { var c1 cat var d1 dog2 =dog2{"小明"} var p1 person2 da(c1) //喵喵喵~ da(d1) //小明叫:旺旺旺~~ da(p1) //啊啊啊~ var s speaker s = d1 fmt.Println(s)//{小明} }

接口类型存储原理

在这里插入图片描述 在这里插入图片描述

9.2、值接收者和指针接收者实现接口的区别

使用值接收者实现接口,结构体类型和结构体指针类型的变量都能存,

指针接收者实现接口只能存结构体指针类型的变量。

9.3、接口与类型的关系

多个类型可以实现同一个接口,一个类型可以实现多个接口,接口还可以嵌套。

//嵌套接口 type animals interface { move eat } type move interface { move() } type eat interface { eat(s string) } type cat1 struct { name string } func (c cat1)move() { fmt.Printf("%s在走\n",c.name) } func (c cat1)eat(s string) { fmt.Printf("%s在吃%s\n",c.name,s) } func main() { var c = cat1{"tom"} var m move var e eat var a animals m = c e = c a = c c.eat("鱼")//tom在吃鱼 c.move()//tom在走 fmt.Println(c)//{tom} fmt.Println(m)//{tom} fmt.Println(e)//{tom} fmt.Println(a)//{tom} } 9.4、空接口 type a interface { }

空接口没有必要命名,一般定义为以下格式:

interface{}

所有的变量都实现了空接口,也就是任意类型的变量都能保存到空接口中。

比如:Go语言的打印传的参数就是空接口

在这里插入图片描述

注意:

interface:关键字

interface{}:空接口

9.5、类型断言 //类型断言 func assign(a interface{}) { fmt.Printf("%T\t\t\t", a) str, ok := a.(string) if !ok { fmt.Println("传进来的值不是字符串") } else { fmt.Println("传进来的值是字符串:", str) } } //类型断言 func assign2(a interface{}) { fmt.Printf("%T\t\t\t", a) switch t := a.(type) { case string: fmt.Println("是字符串类型:", t) case int: fmt.Println("是int类型:", t) case int64: fmt.Println("是int64类型:", t) case bool: fmt.Println("是bool类型:", t) default: fmt.Println("是其他类型:", t) } } func main() { assign(100) assign("张三") assign2("张三") assign2(100) assign2(int64(200)) assign2(true) }

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3