代码
package main
import "fmt"
/*
go语言中,有专门的关键字表示接口:interface
interface不仅可以处理多态,还可以接收任意的数据类型。
*/
func main() {
// 定义三个接口
var i, j, k interface{}
names := []string{"Duke", "Lily"}
age := 20
str := "Hello"
i = names
j = age
k = str
fmt.Println("i代表切片数组:", i)
fmt.Println("j代表数字:", j)
fmt.Println("k代表字符串:", k)
/*
问题:我们只知道i,j,k都是interface,但不知道代表什么数据类型。
*/
// 现在k是一个字符串类型,判断k是不是int类型(不太常用)
fmt.Println("案例1")
value, ok := k.(int)
if ok {
fmt.Println("k 是int数据类型,值为:", value)
} else {
fmt.Println("k不是int")
}
/*
常用场景:把interface当成一个函数参数,switch判断不同数据类型
根据不同类型,做相应逻辑处理
*/
// 创建一个具有4个接口的类型的切片
fmt.Println("案例2")
arr := make([]interface{}, 4)
arr[0] = 1
arr[1] = "Hello"
arr[2] = true
arr[3] = 3.11112323
for _, value := range arr {
// 获取当前接口的真正数据类型
switch v := value.(type) {
case int:
fmt.Printf("当前数据类型为int,值为:%d\n", v)
break
case bool:
fmt.Printf("当前数据类型为bool,值为:%v\n", v)
break
case string:
fmt.Printf("当前数据类型为string,值为:%s\n", v)
break
default:
fmt.Println("数据类型不合理。")
}
}
}
结果
ASUS@DESKTOP-NFP9SLA MINGW64 /c/gowork/src
$ go run 012_interface.go
i代表切片数组: [Duke Lily]
j代表数字: 20
k代表字符串: Hello
案例1
k不是int
案例2
当前数据类型为int,值为:1
当前数据类型为string,值为:Hello
当前数据类型为bool,值为:true
数据类型不合理。