在go语言中,一个类只要实现了接口要求的所有函数,我们就说这个类实现了这个接口。 golang接口赋值实现方式一:将对象实例赋值给接口

package main

import "fmt"

//定义一个Animal接口,实现飞和跑的功能
type Animal interface {
	Fly()
	Run()
}

//定义一个Bird类
type Bird struct {

}

//通过类实现接口的函数功能

func (bird Bird) Fly()   {
	fmt.Println("the bird is flying!!!")
}

func (bird Bird) Run()  {
	fmt.Println("the bird is running!!!")

}

func main()  {


	// 声明一个Animal接口类型的变量
	var animal Animal
	//声明一个Bird类型的变量,并将其置0
	//new()函数是一个用来分配内存的内建函数,它不初始化内存,只将其置0。
	bird := new(Bird)

	//把bird对象赋值给animal接口
	animal = bird
	//调用接口中的函数功能
	animal.Fly()
	animal.Run()



}

golang接口赋值实现方式二:将接口赋值给接口

package main

import "fmt"

//定义一个Animal接口,实现飞和跑的功能
type Animal interface {
	Fly()
	Run()
}

type Animal2 interface {
	Fly()

}

//定义一个Bird类
type Bird struct {

}

//通过类实现接口的函数功能

func (bird Bird) Fly()   {
	fmt.Println("the bird is flying!!!")
}

func (bird Bird) Run()  {
	fmt.Println("the bird is running!!!")

}

func main()  {


	// 声明一个Animal接口类型的变量
	var animal Animal
	var animal2 Animal2
	//声明一个Bird类型的变量,并将其置0
	//new()函数是一个用来分配内存的内建函数,它不初始化内存,只将其置0。
	bird := new(Bird)

	//把bird对象赋值给animal接口
	animal = bird
	
	//将animal接口赋值给animal2,注意函数功能包含关系,包含方法多的接口可以赋值给方法少的接口,反之,则不行。
	animal2 = animal
	//调用接口中的函数功能
	animal.Fly()
	animal.Run()
	animal2.Fly()


}