Go语言 接口(interface)

本篇文章主要为Go语言 接口定义、示例、类型断言及常用场景。

目录

接口(interface)

接口示例

类型断言

常用场景

总结


接口(interface)

接口是和调用方的一种约定,它是一个高度抽象的类型。

不用和具体的实现细节绑定在一起,关键字interface。

interface不仅仅是用于处理多态的,它可以接受任意的数据类型,有点类似void。

接口示例

示例如下:

Go 复制代码
package main

import "fmt"

// 在go语言中,有专门的关键字interface来代表接口
// interface不仅仅是用于处理多态的,它可以接受任意的数据类型,有点类似void。

func main() {
   // var i,h,k int
   // 定义三个接口类型

   var i, j, k interface{}
   names := []string{"dake", "liyu"}
   i = names
   fmt.Println("i代表切片数组:", i)

   age := 20
   j = age
   fmt.Println("j代表数字:", j)

   str := "hello"
   k = str
   fmt.Println("k代表字符串:", k)
}

运行结果:

bash 复制代码
i代表切片数组: [dake liyu]
j代表数字: 20
k代表字符串: hello

类型断言

用来判断一个接口的值是否该接口的某个具体类型。

现在知道k是interface,但是不能够明确知道它代表的数据的类型,

ok是类型断言是否成功的标志,通过ok来判断数据的类型,true是成功,false表示失败。

示例如下:

Go 复制代码
kvalue, ok := k.(int)
if !ok {
   fmt.Println("k不是int")
}else{
   fmt.Println("k是int, 值为:", kvalue)
}

常用场景

最常用的场景:把interface当成一个函数的参数,(类似于Print),

使用switch来判断用户输入的不同类型;根据不同类型,做相应逻辑处理。

示例如下:

Go 复制代码
package main

import "fmt"

func main() {
   // 创建一个具有三个接口类型的切片
   arr := make([]interface{}, 3)
   arr[0] = 1
   arr[1] = "面朝大海 春暖花开"
   arr[2] = true

   for _, value := range arr{
      // 可以获取当前接口的真正数据类型
      switch v:=value.(type) {
      case int:
         fmt.Printf("当前类型为int,内容为:%d\n", v)
      case string:
         fmt.Printf("当前类型为int,内容为:%s\n", v)
      case bool:
         // %v可以自动推到输出类型
         fmt.Printf("当前类型为int,内容为:%v\n", v)
      default:
         fmt.Printf("不是合理的数据类型")
      }

   }
}

运行结果:

bash 复制代码
当前类型为int,内容为:1
当前类型为int,内容为:面朝大海 春暖花开
当前类型为int,内容为:true

总结

本篇文章主要为Go语言 接口定义、示例、类型断言及常用场景。

相关推荐
明月_清风4 小时前
加密解密系统完全指南:原理剖析与 Go 实践
后端
方也_arkling4 小时前
【Java-Day08】static / final / 枚举
java·开发语言
风吹夏回4 小时前
Python 全局异常处理:从“满屏 try-except”到优雅兜底
开发语言·python
Chengbei114 小时前
一站式源码安全检测工具、云安全 / APP / 小程序源码敏感信息递归多层目录扫描AK、JWT、手机号、身份证等敏感信息
java·开发语言·安全·web安全·网络安全·系统安全·安全架构
llz_1124 小时前
web-第一次课后作业
java·开发语言·idea
小熊Coding4 小时前
Python爬取当当网二手图书项目实战!
开发语言·爬虫·python·beautifulsoup·requests·二手图书
秋94 小时前
Java项目运行5天左右自动宕机:系统性定位与解决方案
java·开发语言·python
小江的记录本5 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
xiaoshuaishuai85 小时前
C# 内存管理与资源泄漏
开发语言·c#
lsx2024065 小时前
SVN 检出操作
开发语言