分享
  1. 首页
  2. 文章

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

mb6066e504cce6f · · 507 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

前言

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

执行结果

图片

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


空接口在函数中的应用

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

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


函数参数为空接口代码

package mainimport "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语言的接口是全部都讲完了。

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

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

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

如果在操作过程中有任何问题,记得下面留言,我们看到会第一时间解决问题。

加油!!!我是码农星期八,如果觉得还不错,记得动手点赞一下哈。感谢你的观看。



有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:mb6066e504cce6f

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

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
507 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏