Skip to content

接口

  • 可以作为数据类型使用,相当于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")
}