当前位置:首页 > 数据库

一篇文章带你了解Go语言基础之接口(下篇)

 前言

Hey,篇文大家好呀,章带我是解G接口码农,星期八,上次咱们说的语言基接口呀,还是下篇没说完,还剩下了一些

下面就来看看叭!!

空接口含义

本篇介绍的篇文就是存储类接口,存储接是章带我的命名,其实人家就叫空接口。解G接口

空接口的语言基作用就是可以存储任何数据。

同理,下篇空接口没有定义任何方法,篇文也就是章带说任何接口都实现了空接口,所以空接口才能存任意数据。解G接口

空接口

空接口示例代码

package main import "fmt" func main() {      //变量直接赋值为空接口     var x interface{ }     x = 1     x = 1.1     x = "666"     x = [3]int{ 1,语言基 2,下篇 3} //数组     x = []int{ 6, 23}    //切片     x = map[string]string{          "Name": "张三",         "Age":  "666", }     fmt.Println(x)     //map中value类型为空接口     var y = map[string]interface{ }{          "Name":"张三",         "Age":18, }     fmt.Println(y) 

执行结果

空接口确实是可以存储任何数据的,并且是网站模板直接可以使用的。

空接口在函数中的应用

不知道你有没有想过,如果函数的参数,也是一个空接口,那不是就可以随便传值了吗?

我还用个毛静态类型,以后都用空接口得了,嗯。。。这个按下不表,等会说。

函数参数为空接口代码

package main import "fmt" func say(x interface{ }) {      fmt.Println(x) } func main() {      say(1)     say("666")     say([]int{ 5, 1, 3}) } 

确实是如上述所说,函数参数为空接口类类型,的确可以传任何数据。

但是仅限打印时可以随便打印。

假设我想让传入的值+1。

func say(x interface{ }) {      fmt.Println(x)     fmt.Println(x+1) } 

报错信息

 

所以说,空接口并不是万能的。

类型断言

上述函数虽然可以接收任意类型。

但是亿华云我有个需求。

如果传入的是int类型,参数+100。

如果传入的是字符串类型,参数+"666"。

如果传入的是其他类型,返回不存在。

这该怎么办呢?这就要用到断言这个功能。

断言语法

空接口.(类型) 

示例代码

func say(x interface{ }) {      value, ok := x.(int)     if ok {          //如果是ok表示断言成功,是int类型         fmt.Println(value + 100) }     value2, ok := x.(string)     if ok {          //断言成功表示是字符串         fmt.Println(value2 + "666")   } } 

如果说有很多类型,断言起来比较麻烦,这时候用switch比较好。

func say(x interface{ }) {      switch value := x.(type) {      case int:         fmt.Println(value + 10)     case string:         fmt.Println(value + "666")     default:         fmt.Println("啥都不是")   } } //case可以继续写,可以写很多很多 

执行结果

总结

到此为止,Go语言的接口是全部都讲完了。

接口主要分为行为接口和存储接口。

行为接口主要用在面向对象这个方向,规定父类必须有哪些动作。

空接口时为了方便存值,可以存储任意类型。

云南idc服务商

分享到:

滇ICP备2023006006号-16