特殊的数据类型
方法定义的合集
方法名(形参类型)返回值类型
提高代码的复用率
package main
import "fmt"
// Animal 定义一个animal的接口,它有唱,跳,rap的方法
type Animal interface {
sing()
jump()
rap()
}
// Chicken 需要全部实现这些接口
type Chicken struct {
Name string
}
func (c Chicken) sing() {
fmt.Println("chicken 唱")
}
func (c Chicken) jump() {
fmt.Println("chicken 跳")
}
func (c Chicken) rap() {
fmt.Println("chicken rap")
}
// 全部实现完之后,chicken就不再是一只普通的鸡了
func main() {
var animal Animal
animal = Chicken{"ik"}
animal.sing()
animal.jump()
animal.rap()
}
接口本身不能绑定方法
接口是值类型,保存的是:值+原始类型
package main
import "fmt"
// Animal 定义一个animal的接口,它有唱,跳,rap的方法
type Animal interface {
sing()
jump()
rap()
}
// Chicken 需要全部实现这些接口
type Chicken struct {
Name string
}
func (c Chicken) sing() {
fmt.Println("chicken 唱")
}
func (c Chicken) jump() {
fmt.Println("chicken 跳")
}
func (c Chicken) rap() {
fmt.Println("chicken rap")
}
// Cat 需要全部实现这些接口
type Cat struct {
Name string
}
func (c Cat) sing() {
fmt.Println("cat 唱")
}
func (c Cat) jump() {
fmt.Println("cat 跳")
}
func (c Cat) rap() {
fmt.Println("cat rap")
}
func sing(obj Animal) {
obj.sing()
}
// 全部实现完之后,chicken就不再是一只普通的鸡了
func main() {
chicken := Chicken{"ik"}
cat := Cat{"阿狸"}
sing(chicken)
sing(cat)
}
实现接口:
一个类型实现了接口的所有方法
即实现了该接口
类型断言
还原为原始类型 interface.(Type)
如果接口没有保存类型,则会报错
可返回两个值
value,ok := interface.(Type)
空接口
interface{}
空接口可以保存任何类型
package main
import "fmt"
type data interface{}
type Dog struct {
Name string
}
func Print(d data) {
fmt.Println(d)
}
func main() {
d := Dog{"小黑"}
Print(d)
Print(12)
Print("123")
Print(true)
Print([]int{1, 2, 3})
Print(make(map[string]string, 2))
}
nil问题
nil值:有类型没有值,接口本身并不是nil,可以处理
nil接口:既没有报错值,也没有保存类型,使用时会报错