Go学习第六天 接口

接口(interface)

快一周啦,感觉自己的进度还是有点慢,害,代码就是要多打,不能停,不然过几个月就忘了,所以博客的重要性就来了,继续继续

  • 接口是一种类型,通俗来说就是一种约定。
  • 使用接口以后,我不关系调用者的类型,只关心能否使用他的某个方法。
  • 只要是有这个方法的类型,都可以传入进行

例如:

package main

import "fmt"

type dog struct{}
type cat struct{}
type person struct{}

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

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

func (p person) speak() {
	fmt.Println("嘤嘤嘤~")
}

type speaker interface {
	speak()
}

func da(x speaker) {
	x.speak()
}

func main() {
	var d dog
	var c cat
	var p person
	da(d)
	da(c)
	da(p)
}

//汪汪汪~
//喵喵喵~
//嘤嘤嘤~
  • 设置三个类,狗,猫,人,然后调用一个函数,能够调用这个类型里面的speak方法。
  • 这就是接口的作用拉。

同一个结构体可以实现多个接口

接口之间还可以进行嵌套

空接口的使用

  • 我们在使用map的时候,存放的都是相同的类型变量,如果我们的map里面的v想存放多个类型的时候,我们就可以使用空接口来装了

例如:

在这里插入图片描述

  • 这样子,我们就可存放多重不同类型的value了。

但是这也有一个新的问题哈,我怎么知道这个map里面的对应的value是什么类型的呢?总不能看一个输出一个 %T 去看一下吧!!啊哈哈哈哈哈

  • 想要判断空接口中的值这个时候就可以使用类型断言,其语法格式:
	x.(T)

是不是看不明白呀,没关系

  • x:表示类型为interface{}的变量
  • T:表示断言x可能是的类型。

就是不停的猜猜猜,啊哈哈哈哈哈哈

举个例子

在这里插入图片描述

  • 是不是直观?啥,你问我有什么用?
  • emmmm,遇到了需求就有用了,啊哈哈哈哈哈哈

但是这一直猜下去也不是一个事呀?怎么搞

  • 这个,我们搞个函数,用switch语句,一个一个格式都搞里面去,下次直接调用即可啦
  • 例子
func isType(x interface{}) {
	switch v := x.(type) {
	case string:
		fmt.Printf("x is a string,value is %v\n", v)
	case int:
		fmt.Printf("x is a int is %v\n", v)
	case bool:
		fmt.Printf("x is a bool is %v\n", v)
	default:
		fmt.Println("unsupport type!")
	}
}
  • 直接调用即可,嘿嘿
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木木不会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值