当前位置: 首页 > wzjs >正文

班级网站空间建设取得效果wordpress 图片懒加载

班级网站空间建设取得效果,wordpress 图片懒加载,深圳网站开发制作,家居网站建设哪家好继承(结构体嵌入)多态(接口实现和空接口) 1. 继承(结构体嵌入) Go 语言没有传统的面向对象的继承机制,但可以通过“结构体嵌入”实现类似继承的效果。 结构体嵌入:在结构体中嵌入另…
  1. 继承(结构体嵌入)
  2. 多态(接口实现和空接口)

1. 继承(结构体嵌入)

Go 语言没有传统的面向对象的继承机制,但可以通过“结构体嵌入”实现类似继承的效果。

  • 结构体嵌入:在结构体中嵌入另一个结构体,使得子结构体可以直接访问父结构体的字段和方法。
  • 字段重写:若子结构体定义了与嵌入的结构体同名的字段,则可以认为“重写”了父结构体的同名字段,访问时默认访问子结构体自己的字段,若需要访问父结构体的字段,则使用 StructName.FieldName

代码示例:

// 文件名: 03_inheritance.go
package mainimport "fmt"// 定义父类结构体 Person1
type Person1 struct {name stringage  int
}// 定义另一个父类结构体 Person2(用于展示多个继承时的处理,字段冲突时需要显式区分)
// type Person2 struct {
// 	name string
// 	age  int
// }// 定义子类结构体 Teacher,通过嵌入 Person1 来实现继承
type Teacher struct {Person1 // 嵌入 Person1,实现继承// 如果想继承多个,则可以嵌入 Person2,但注意字段会冲突,需要通过显式调用来区分// Person2 // 多继承示例subject stringname    int // 子类中重写了 name 字段(此字段会覆盖 Person1 中的同名字段)
}// 为 Person1 定义一个方法
func (p *Person1) Hello() {fmt.Println("I am Person1....")
}func main() {// 通过字面量实例化 Teacher,初始化 Person1 部分和子类特有字段t2 := Teacher{Person1: Person1{"zhangsan", 12},subject: "math",}fmt.Printf("t2: %+v\n", t2)// 先实例化一个 Person1 对象,然后将其赋值给 Teacher 的 Person1 字段p1 := Person1{"mikodo", 19}t3 := Teacher{Person1: p1, subject: "golang"}fmt.Printf("t3: %+v\n", t3)// 调用继承的方法t2.Hello()       // 等效于 t2.Person1.Hello()// 演示字段重写t2.name = 100                // 修改 Teacher 中的 name 字段(子类自己的字段)t2.Person1.name = "luobozi"  // 修改嵌入的 Person1 的 name 字段fmt.Printf("t2 after change: %+v\n", t2)
}

说明:

  • 结构体 Teacher 嵌入了 Person1,因此可以直接调用 Person1 的方法,如 Hello()
  • 子类 Teacher 定义了自己的 name 字段,这样在访问时默认访问的是 Teacher.name;如需要访问父结构体中的 name 则使用 Teacher.Person1.name

2. 多态

Go 语言多态主要通过接口(interface)实现。

  • 接口定义:接口定义了一组方法,任何实现了这些方法的类型都被视为该接口类型。
  • 鸭子类型:Go 的多态不关心具体类型,只关心是否具有接口所需的方法。
  • 空接口:空接口 interface{} 可以表示任意类型,相当于其他语言的 Object 类型。

代码示例:

// 文件名: 03_polymorphism.go
package mainimport "fmt"// 定义 MoneyPay 接口,要求实现 pay 方法
type MoneyPay interface {pay()
}// 定义空接口类型(可以代表任何数据类型)
type kong interface{}// 定义 ZFB 结构体,代表支付宝
type ZFB struct {name string
}// 定义 WX 结构体,代表微信
type WX struct {name string
}// 为 ZFB 绑定方法,实现 MoneyPay 接口
func (z *ZFB) pay() {fmt.Println("this is zfb pay")
}// 为 WX 绑定方法,实现 MoneyPay 接口
func (w *WX) pay() {fmt.Println("this is wx pay")
}// 定义函数 FinPay,接收 MoneyPay 接口类型的参数
func FinPay(p MoneyPay) {p.pay()
}func main() {// 实例化支付宝和微信对象(均为指针类型)z1 := &ZFB{"支付宝"}w1 := &WX{"微信"}// 接口变量可以接收实现该接口的任何对象var j1, j2 MoneyPayj1 = z1j2 = w1fmt.Println("j1 and j2:", j1, j2)// 通过接口调用支付方法,实现多态FinPay(z1)FinPay(w1)// 空接口示例,空接口可以保存任意类型的数据m1 := map[string]kong{"name": "luobozi","age":  18,}fmt.Println("空接口 map:", m1)// 类型断言:将空接口中的数据转换为具体类型,然后进行计算result := m1["age"].(int) + 10fmt.Println("断言后计算结果:", result)
}

说明:

  • 接口 MoneyPay 定义了 pay() 方法,ZFBWX 结构体分别通过指针接收者实现了该方法,从而都满足 MoneyPay 接口。
  • 函数 FinPay 接收接口类型参数,可以接受任何实现了 pay() 方法的类型,体现多态性。
  • 空接口 kong 可以存放任意数据,通过类型断言可以获取具体类型值。

总结

本篇代码整理涵盖了 Go 语言中“继承和多态”的相关知识点:

  1. 继承(结构体嵌入)

    • 利用结构体嵌入实现类似继承的效果
    • 字段重写示例:子类中定义同名字段覆盖父类字段
    • 调用嵌入结构体的方法
  2. 多态

    • 通过接口定义多态行为,只要类型实现了接口方法,就能被当作该接口类型使用
    • 演示了如何使用空接口存储任意类型数据,并通过类型断言获取具体类型

文章转载自:

http://VY008hf0.hmbxd.cn
http://32TZR3VW.hmbxd.cn
http://maoLJeAQ.hmbxd.cn
http://4c1tChHa.hmbxd.cn
http://Aym5pXDl.hmbxd.cn
http://eW4t1ynb.hmbxd.cn
http://6KsN5Mui.hmbxd.cn
http://v0foVw0L.hmbxd.cn
http://lWCa7ul7.hmbxd.cn
http://oND9tZOa.hmbxd.cn
http://5rR9zUa3.hmbxd.cn
http://qhuGlxC8.hmbxd.cn
http://yCdeuuIP.hmbxd.cn
http://viuMde3y.hmbxd.cn
http://c20YDxri.hmbxd.cn
http://dOFh30eP.hmbxd.cn
http://JQw9Dtic.hmbxd.cn
http://zcM1FLKw.hmbxd.cn
http://6McmzCd9.hmbxd.cn
http://2D4srlo3.hmbxd.cn
http://SPZ9dr36.hmbxd.cn
http://dSKtGDJU.hmbxd.cn
http://icSxgFAB.hmbxd.cn
http://cRiEkGzu.hmbxd.cn
http://9q4YwK34.hmbxd.cn
http://4GlnaLWZ.hmbxd.cn
http://h6IFf732.hmbxd.cn
http://wMirsm21.hmbxd.cn
http://ZnVRAznR.hmbxd.cn
http://1uKhMGPh.hmbxd.cn
http://www.dtcms.com/wzjs/720582.html

相关文章:

  • 劳务网站怎样做网络运维工程师培训
  • 山西正规网站建设推广东莞网络优化哪家好
  • 深圳建设局网站昭通建设网站
  • 台州市建设规划局网站黑色时尚橱柜网站源码
  • 昆明网站制作企业宁波网站建设团队哪家好
  • 新开传奇网站大全信息推广平台有哪些
  • 网站推广一般在哪个网做哪些网站可以做化妆品广告
  • 注册网站免费注册水煮鱼wordpress模板
  • 远象建设 网站做电子商务平台网站
  • 图片 展示 网站模板郑州教育信息网
  • 烟台seo网站排名优化上海展览设计公司
  • 网站建设费用算广告费吗网站备案手续费
  • 公司做的网站费用如何做账北京app开发公司排名
  • 个人可以做几个网站杭州平面设计公司
  • 怎样在网站上做专栏建筑效果图网站有哪些
  • 电商网站首页图片深圳市罗湖网站建设
  • 怎么看别人网站在哪里做的外链wordpress记录修改文章时间
  • 什么网站权重大文化传媒公司
  • 网站做导航设计的作用是什么win10系统优化工具
  • 在网站做电子画册小程序软件开发哪家好
  • 浙江省水利建设行业协会网站网站备案注销原因
  • 网站怎么做的精致一点修改wordpress前端
  • 网站建设与维护培训怎么做网站版面分析
  • 企业网站的搜索引擎推广与优化网站建设发布教程视频教程
  • 织梦系统网站打开速度慢wordpress 评论函数
  • 经营网站挣钱密山网站建设
  • 多语言网站是怎么做的上海百网优seo优化公司
  • 眉山市规划建设局网站网站建设的第一阶段
  • 辽宁住房和城乡建设网站尚硅谷python基础教程
  • 杭州高端网站建设到蓝韵网络多个网站如何做301