空接口的概念
- 该接⼝中没有任何的⽅法,任意类型都可以实现该接⼝。
空接口的定义
- 包含0个method的interface。
- type xxx interface {}
空接口的使用场景
- ⽤空接⼝表示任意数据类型,类似于java中的object。
- println的参数就是空接⼝;
- 定义⼀个map: key是string, value是任意数据类型;
- 定义⼀个切⽚,其中存储任意类型的数据。
案例如下:
//myInterfaceNull.go
// myInterfaceNull project main.go
package main
import (
"fmt"
)
//定义空接口
type A interface {
}
type Cat struct {
name string
age int
}
type Person struct {
name string
sex string
}
func testInterface(s []interface{}) {
for i := range s {
fmt.Println("第", i+1, "个数据")
switch ins := s[i].(type) {
case Cat:
fmt.Println("\tCat对象: ", ins.name, ins.age)
case Person:
fmt.Println("\tPerson对象: ", ins.name, ins.sex)
case int:
fmt.Println("\tint类型: ", ins)
case string:
fmt.Println("\tstring类型: ", ins)
case float64:
fmt.Println("\tfloat64类型: ", ins)
}
}
}
func main() {
//fmt.Println("Hello World!")
//用空接口表示任意数据类型,类似于java中的Object
var a1 A = Cat{name: "Mimi", age: 1}
var a2 A = Person{"Steven", "man"}
var a3 A = "Learn golang with me!"
var a4 A = 100
var a5 A = 3.14
fmt.Printf("%T, %v\n", a1, a1)
fmt.Printf("%T, %v\n", a2, a2)
fmt.Printf("%T, %v\n", a3, a3)
fmt.Printf("%T, %v\n", a4, a4)
fmt.Printf("%T, %v\n", a5, a5)
fmt.Printf("--------------------")
//1. println的参数就是空接口
fmt.Println("println的参数可以是任意类型,用空接口表示\n", 100,
3.14, Cat{"小天", 2})
//2. 定义一个map: key是string,value是任意类型
map1 := make(map[string]interface{})
map1["name"] = "Daniel"
map1["age"] = 13
fmt.Println(map1)
fmt.Println("--------------------")
//3.定义一个切片,其中可以存储任意类型的数据
slice1 := make([]interface{}, 0, 10)
slice1 = append(slice1, a1, a2, a3, a4, a5)
fmt.Println(slice1)
testInterface(slice1)
}
效果如下: