Go语言中的空接口

空接口的概念

  • 该接⼝中没有任何的⽅法,任意类型都可以实现该接⼝。

空接口的定义

  • 包含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)
}


    效果如下:


图(1) 空接口的使用

猜你喜欢

转载自blog.csdn.net/sanqima/article/details/108907472