本篇文章主要为Go语言 接口定义、示例、类型断言及常用场景。
目录
接口(interface)
接口示例
类型断言
常用场景
总结
接口是和调用方的一种约定,它是一个高度抽象的类型。
不用和具体的实现细节绑定在一起,关键字interface。
interface不仅仅是用于处理多态的,它可以接受任意的数据类型,有点类似void。
示例如下:
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)
}
运行结果:
i代表切片数组: [dake liyu]
j代表数字: 20
k代表字符串: hello
用来判断一个接口的值是否该接口的某个具体类型。
现在知道k是interface,但是不能够明确知道它代表的数据的类型,
ok是类型断言是否成功的标志,通过ok来判断数据的类型,true是成功,false表示失败。
示例如下:
kvalue, ok := k.(int)
if !ok {
fmt.Println("k不是int")
}else{
fmt.Println("k是int, 值为:", kvalue)
}
最常用的场景:把interface当成一个函数的参数,(类似于Print),
使用switch来判断用户输入的不同类型;根据不同类型,做相应逻辑处理。
示例如下:
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("不是合理的数据类型")
}
}
}
运行结果:
当前类型为int,内容为:1
当前类型为int,内容为:面朝大海 春暖花开
当前类型为int,内容为:true
本篇文章主要为Go语言 接口定义、示例、类型断言及常用场景。