Go结构体继承指针和非指针区别(转换接口)
发布时间:2021-05-26 编辑:jiaochengji.com
教程集为您提供Go结构体继承指针和非指针区别(转换接口)等资源,欢迎您收藏本站,我们将为您提供最新的Go结构体继承指针和非指针区别(转换接口)资源
1.实例不转换为接口的情况下无区别
总结:
不转换为接口时(字段继承和字段指针继承)无区别,
在代码中1,2,3,4处(即a,b,pa,pb)都可以正常调用父类的函数
package main
import "fmt"
type iter interface {
run()
sleep()
}
type base struct{}
func (p *base)run() {
fmt.Println("Base::run()")
}
func (p base)sleep() {
fmt.Println("Base::sleep()")
}
type subA struct {
base // 字段继承
}
type subB struct {
*base // 字段指针继承
}
/**
总结:
不转换为接口时(字段继承和字段指针继承)无区别,就是正常类型实例使用
在1,2,3,4处(即a,b,pa,pb)都可以正常调用父类的函数
*/
func main() {
// 实例[字段继承]
a := subA{base{}}
a.run() // 1
a.sleep()
// 实例[字段指针继承]
b := subB{&base{}}
b.run() // 2
b.sleep()
// 指针实例[字段继承]
pa := &subA{base{}}
pa.run() // 3
pa.sleep()
// 指针实例[字段指针继承]
pb := &subB{&base{}}
pb.run() // 4
pb.sleep()
}
2.实例转换接口时有区别
总结:
转换为接口时(字段继承和字段指针继承)有区别,
在B1,C1,D1都可以正常运行
在A1处出现错误,即subA实例[字段继承]未实现接口 run()方法
package main
import "fmt"
type iter interface {
run()
sleep()
}
type base struct{
}
func (p *base)run() {
fmt.Println("Base::run()")
}
func (p base)sleep() {
fmt.Println("Base::sleep()")
}
type subA struct {
base
}
// ---------HERE------------
//func (p subA)run() {
// fmt.Println("Base::run()")
//}
type subB struct {
*base
}
/**
总结:
转换为接口时(字段继承和字段指针继承)有区别,
在B1,C1,D1都可以正常运行
在A1处出现错误,即subA实例[字段继承]未实现接口run()方法
*/
func main() {
// ======实例转换为接口=============
var i iter
// a实例[字段继承]
a := subA{base{}}
// 如果需要将a实例转化为接口,必须实现接口
// Base结构体已经实现了接收者为实例的sleep()方法
// 那么可以在subA结构体实现 接收者为实例接受的run()方法即可---位于HERE处
//
i = a // A1 erro subA未实现接口,父类仅仅实现了sleep()方法,run()没有实现
i.run() // A1
i.sleep()
// b实例[字段指针继承]
b := subB{&base{}}
i = b // subB实现了接口
i.run() // B1
i.sleep()
// =======指针实例转换为接口==========
// 指针实例[字段继承]
pa := &subA{base{}}
i = pa // subA实现了接口
i.run() // C1
i.sleep()
// 指针实例[字段指针继承]
pb := &subB{&base{}}
i = pb // subB实现接口
i.run() // D1
i.sleep()
}
具体可查看
go值接收者方法和指针接收者方法
到此这篇关于“Go结构体继承指针和非指针区别(转换接口)”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!您可能感兴趣的文章:
Go结构体继承指针和非指针区别(转换接口)
Golang-对象方法和实现接口时,方法接受者是指针还是对象的区别
Go学习笔记:接口实现与指针
Go 继承,结构体实现继承
Go语言面组合式向对象编程基础总结
浅谈golang中的接口
Golang指针的使用限制和unsafe.Pointer的突破之路
golang中接口的内部实现
基于类型系统的面向对象编程语言Go
golang 结构体断言_Golang的面向对象编程【结构体、方法、继承、接口】-Go语言中文社区...
[关闭]