package main
import (
"fmt"
)
//定义结构体猫
type mao struct {
name string
}
//定义接口
type jiekou interface {
jiao()
}
//实现接口中方法,此时接收者是值类型
func (j mao) jiao() {
fmt.Println("猫叫了")
}
func main() {
var g jiekou //声明了接口类型
var g2 jiekou //声明了接口类型
i := mao{} //初始化结构体
g = i //向上转型,传的是mao这个对象
g2 = &i //向上转型,传的是mao这个对象的指针
g.jiao() //调用方法
g2.jiao() //调用方法
}
上面的代码能正确的输出 猫叫了,这说明接收者是值类型,对象传值和指针都能向上转型成功
package main
import (
"fmt"
)
//定义结构体猫
type mao struct {
name string
}
//定义接口
type jiekou interface {
jiao()
}
//实现接口中方法,此时接收者是指针类型
func (j *mao) jiao() {
fmt.Println("猫叫了")
}
func main() {
var g jiekou //声明了接口类型
var g2 jiekou //声明了接口类型
i := mao{} //初始化结构体
g = i //这里报错,要传地址
g2 = &i //向上转型,传的是mao这个对象的指针
g.jiao() //调用方法
g2.jiao() //调用方法
}