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

开发 后端
本篇介绍的就是存储类接口,存储接是我的命名,其实人家就叫空接口。

[[356560]]

 前言

Hey,大家好呀,我是码农,星期八,上次咱们说的接口呀,还是没说完,还剩下了一些

下面就来看看叭!!

空接口含义

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

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

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

空接口

空接口示例代码

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) 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

执行结果


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

空接口在函数中的应用

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

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

函数参数为空接口代码

package main 
import "fmt" 
 
func say(x interface{}) { 
    fmt.Println(x) 

func main() { 
    say(1) 
    say("666"
    say([]int{5, 1, 3}) 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

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

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

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

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

  • 1.
  • 2.
  • 3.
  • 4.

报错信息

 

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

类型断言

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

但是我有个需求。

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

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

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

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

断言语法

空接口.(类型) 
  • 1.

示例代码

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"
  } 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

如果说有很多类型,断言起来比较麻烦,这时候用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可以继续写,可以写很多很多 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

执行结果


总结

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

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

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

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

 

责任编辑:姜华 来源: Go语言进阶学习
相关推荐

2021-10-30 10:43:04

语言Go函数

2022-02-16 10:03:06

对象接口代码

2020-12-07 05:59:02

语言Go接口

2020-10-22 08:33:22

Go语言

2020-11-11 10:52:54

Go语言C语言

2020-11-05 09:58:16

Go语言Map

2021-11-03 10:02:07

Go基础函数

2022-04-27 10:01:43

切片Go封装

2020-12-30 09:04:32

Go语言TCPUDP

2020-10-25 07:33:13

Go语言

2020-10-23 08:38:19

Go语言

2021-10-09 07:10:31

Go语言基础

2020-12-27 10:15:44

Go语言channel管道

2020-10-22 11:15:47

Go语言变量

2021-10-16 10:17:51

Go语言数据类型

2021-09-29 10:00:07

Go语言基础

2021-10-13 10:00:52

Go语言基础

2020-10-27 11:24:29

avaScript m

2020-12-23 08:39:11

Go语言基础技术

2021-01-13 08:40:04

Go语言文件操作
点赞
收藏

51CTO技术栈公众号