目录
一、接口
接口是一类规范,声明的是一组方法的集合。当一个类型为接口中的所有方法提供定义时,它被称为实现了该接口。
二、声明和实现
type Animal interface {
Eat(e string)
Run()
}
// Dog实现了Animal接口
type Dog struct {
Name string
Sex bool
}
func (d Dog)Eat(e string){
fmt.Printf(d.Name + " can %v.\n", e)
}
func (d Dog)Run(){
fmt.Println(d.Name + " can run.")
}
func main(){
dog := Dog{
Name: "Mumu",
Sex: true,
}
fmt.Println(dog, dog.Name)
var a Animal
a = dog
a.Eat("eat")
a.Run()
// a.Name
// Error: a.Name undefined (type Animal has no field or method Name)
}
/*
输出结果:
{Mumu true} Mumu
Mumu can eat.
Mumu can run.
*/
三、使用
// 空接口
func empty(i interface{}){
fmt.Println(i)
}
func main(){
empty("Entin") // string
empty(7) // int
empty([]int{1, 2, 3}) // slice
}
/*
输出结果:
Entin
7
[1 2 3]
*/
type Animal interface {
Eat()
Run()
}
type Dog struct {
Name string
Sex bool
}
func (d Dog)Eat(){
fmt.Println(d.Name + " can eat.")
}
func (d Dog)Run(){
fmt.Println(d.Name + " can run.")
}
func MyFunc(a Animal){
a.Run()
a.Eat()
}
func main(){
dog := Dog{
Name: "Mumu",
Sex: true,
}
MyFunc(dog) // 传入一个实现了Animal接口的结构体Dog
}
/*
输出结果:
Mumu can run.
Mumu can eat.
*/
type Animal interface {
Eat()
Run()
}
type Dog struct {
Name string
Sex bool
}
func (d Dog)Eat(){
fmt.Println(d.Name + " can eat.")
}
func (d Dog)Run() {
fmt.Println(d.Name + " can run.")
}
var A Animal
func MyFunc(a Animal){
A = a // 对接口进行挂载
}
func main(){
d := Dog{
Name: "Mumu",
Sex: true,
}
MyFunc(d)
A.Run() // A可以使用Run()
}