Golang的封装继承与多态
package main
import "fmt"
// 在C++中,实现接口的时候,使用纯虚函数代替接口
// 在Golang中,有专门的关键字interface来代表接口
// interface不仅仅是用于处理多态的,它可以接收任意的数据类型,类似于void
func main() {
var i, j, k interface{}
names := []string{"simple", "china"}
i = names
fmt.Println("i代表切片数组:", i)
age := 24
j = age
fmt.Println("j代表数字:", j)
str := "hello world"
k = str
fmt.Println("k代表字符串:", k)
// 上上面的代码中,我们现在只知道k是interface,但是不能够明确知道它代表的数据类型
// 通过变量.(数据类型)判断指定interface是否为指定的数据类型
kval, ok := k.(int)
if !ok {
fmt.Println("k不是int")
} else {
fmt.Println("k是int,值为:", kval)
}
// 最常用的常见:把interface当初函数的参数,类似于函数,func Println(a ...interface{}) (n int, err error) {}
// 可以通过switch来判断用户输入的数据类型,然后根据不同的数据类型做相应的逻辑处理
// 创建一个具有三个接口的数据切片
array := make([]interface{}, 4)
array[0] = 1
array[1] = "hello world"
array[2] = true
array[3] = 3.1415
for _, val := range array{
// 获取当前接口的真正数据类型
switch t := val.(type) {
case int:
fmt.Printf("当前数据类型为int,内容为:%d\n",t)
case string:
fmt.Printf("当前数据类型为string,内容为:%s\n",t)
case bool:
fmt.Printf("当前数据类型为bool,内容为:%v\n",t) // %v可以自动推导数据类型
default:
fmt.Printf("不是合理的数据类型")
}
}
}