interface{}

发布时间 2023-07-15 08:22:21作者: 王景迁

判断某个对象是否实现了某个接口

package main

import "fmt"

type inter interface {
	do()
}

type apple struct{}

func (a apple) do() {}

type apple1 struct{}

func main() {
	var i interface{} = apple{}
	_, ok := i.(inter)
	if ok { // true
		fmt.Println("true")
	} else {
		fmt.Println("false")
	}

	i = apple1{}
	_, ok = i.(inter)
	if ok { // false
		fmt.Println("true")
	} else {
		fmt.Println("false")
	}
}

类型断言
x.(T)
x是interface{}类型,T是要断言的类型。
使用场景:当某个类型是interface{}的变量,真实类型是A时,才做某件事。

不能把 interface {}和 nil 直接进行比较

interface{}有类型和值这两个成员变量。只有两个都是 nil 的 interface{}才是 nil。
如果某个具体的对象赋值给 interface{},则该 interface{} 的类型不是 nil,所以不是 nil。