GO语言自学_013_接口

代码
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
数据类型不合理。

posted @ 2022-09-06 20:49  顺心无忧  阅读(17)  评论(0编辑  收藏  举报