go语言结构体中的方法是值接收,实例化后的结构体值类型和结构体指针类型都可以赋值给接口变量
若结构体中的方法是值接收,实例化后的结构体值类型和结构体指针类型都可以赋值给接口变量
值接收者:如果结构体中的方法是值接收者,
那么实例化后的结构体值类型和结构体指针类型都可以赋值给接口变量
package main
import "fmt"
type Usber interface {
start()
stop()
}
type Phone struct {
Name string
}
func (p Phone) start() { // 结构体的接收者是值类型的
fmt.Printf("start phone\n")
}
func (p Phone) stop() {
fmt.Printf("stop phone\n")
}
func main() {
// 结构体的接收者如果是值类型的,实例化后的结构体值类型和体指针类型都可以赋值给接口变量
// 实例化后的结构体值类型
var p = Phone{"小米14"}
var p1 Usber = p // 表示让Phone实现Usber接口
p1.start()
p1.stop()
// 结构体的接收者如果是值类型的,实例化后的结构体值类型和体指针类型都可以赋值给接口变量
var p3 = &Phone{"小米14"}
p3.start()
p3.stop()
}
结构体中的方法是指针类型接收者,实例化后的结构体只能是指针类型才能赋值给接口变量
指针类型接收者:如果结构体中的方法是指针类型接收者,
那么实例化后的结构体只能是指针类型才能赋值给接口变量,值类型不能赋值给接口变量会报错
package main
import "fmt"
type Usber interface {
start()
stop()
}
type Phone struct {
Name string
}
func (p *Phone) start() { // 结构体的接收者是指针类型的
fmt.Printf("start phone\n")
}
func (p *Phone) stop() { // 结构体的接收者是指针类型的
fmt.Printf("stop phone\n")
}
func main() {
// 因为结构体的接收者是指针类型的,所以实例化后的结构体只能是指针类型才能赋值给接口变量
var p3 = &Phone{"小米14"}
p3.start()
p3.stop()
}
结构体中的方法是指针类型接收者,实例化后的结构体如果是值类型,会报错
package main
import "fmt"
type Usber interface {
start()
stop()
}
type Phone struct {
Name string
}
func (p *Phone) start() { // 结构体的接收者是指针类型的
fmt.Printf("start phone\n")
}
func (p *Phone) stop() { // 结构体的接收者是指针类型的
fmt.Printf("stop phone\n")
}
func main() {
// 结构体的接收者如果是值类型的,实例化后的结构体值类型和体指针类型都可以赋值给接口变量
// 实例化后的结构体值类型
var p = Phone{"小米14"}
var p1 Usber = p // 表示让Phone实现Usber接口
p1.start()
p1.stop()
}
会报错的哈
\tempCodeRunnerFile.go:25:17: cannot use p (variable of struct type Phone) as Usber value in variable declaration: Phone does not implement Usber (method start has pointer receiver)
作者:流年少年
出处:https://www.cnblogs.com/ishoulgodo/
本文版权归作者所有,欢迎转载,未经作者同意须保留此段声明,在文章页面明显位置给出原文连接
如果文中有什么错误,欢迎指出。以免更多的人被误导。
出处:https://www.cnblogs.com/ishoulgodo/
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,或者关注博主,在此感谢!
万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主(っ•̀ω•́)っ✎⁾⁾!
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!
支付宝
微信
如果文中有什么错误,欢迎指出。以免更多的人被误导。

浙公网安备 33010602011771号