Appearance
接口
- 可以作为数据类型使用,相当于
any类型 - 可以作为抽象类型使用,定义了一个对象的行为规范,只包含方法签名,不包含具体实现。
空接口 (interface{})
- 没有定义任何方法的接口称为空接口,它可以存储任意类型的值(因为所有类型都隐式实现了空接口)。
go
// 表示 name为任意类型
var name interface{}
var name interface{}
name = "zouyl"
name = 123
name = []string{"zouyl", "123"}
fmt.Println(name)自定义类型
- 接口定义了一个对象的行为规范,只包含方法签名,不包含具体实现。
- 接口可以被任何结构体实现,实现了接口的结构体可以被转换为接口类型。
go
type MyInterface interface {
MyMethod()
}
type MyStruct struct {
Name string
}
func (m MyStruct) MyMethod() {
fmt.Println(m.Name)
}
// 表示 name为 MyInterface 类型
var name MyInterface
name = MyStruct{Name: "zouyl"}
name.MyMethod()类型断言
- 类型断言用于将接口类型转换为指定类型,其语法为:
value.(T) - 只能把interface类型转换为指定类型。
go
var str interface{} = "string"
// 断言为字符串类型
newStr, ok := str.(string)
if ok {
fmt.Printf("'%s' is a string\n", newStr)
} else {
fmt.Println("conversion failed")
}