Golang结构体与面向对象
结构体和内嵌类型
结构体是Golang中面向对象的核心,Golang允许内嵌类型,内嵌可以理解为使用组合来实现继承,给出代码示例:
package main
import "fmt"
type SmallFoo struct {name stringmoney float64
}
func (smallFoo *SmallFoo) Talk() {fmt.Printf("SmallFoo, name: %v, money: %v\n", smallFoo.name, smallFoo.money)
}
type Foo struct {SmallFoo // 内嵌类型,相当于使用继承name stringage int
}
func (foo *Foo) SetName(name string) {foo.name = name
}
func main() {foo := new(Foo)foo.money = 100.0foo.SmallFoo.name = "smallFoo" // 有命名冲突,必须指明内嵌foo.SetName("foo")foo.Talk()fmt.Println(foo)
}
结构体的方法
结构体的方法本身是把面向过程转换到面向对象的。Older
函数和Foo::Older
方法是等价的。注意,如果以值声明的方法,则每次都是复制,一般都用指针的方式。
package mainimport "fmt"type Foo struct {age int
}func (foo *Foo) Older(f *Foo) bool {return foo.age > f.age
}// foo是复制的,不论实际调用中的声明是指针还是值
func (foo Foo) ChangeAgeFalse(age int) { foo.age = age
}// 利用指针才是本身
func (foo *Foo) ChangeAge(age int) {foo.age = age
}func Older(f1, f2 *Foo) bool {return f1.age > f2.age
}func main() {f1 := &Foo{age: 10}f2 := &Foo{age: 5}var b boolb = f1.Older(f2)fmt.Println(b)b = Older(f1, f2)fmt.Println(b)f1.ChangeAgeFalse(12) // 即使是指针声明,也是传递的值fmt.Println(f1)f1.ChangeAge(12)fmt.Println(f1)
}
接口
Go语言的接口是隐式的,只要实现了接口的方法,就能实现转化。
package mainimport "fmt"type Action interface {Fly()
}type AirCraft struct{}func (ac AirCraft) Fly() {fmt.Println("AirCraft Fly")
}type AirCraftP struct{}func (ac *AirCraftP) Fly() { // 虽然实现结构,但是必须以指针的形式传入fmt.Println("AirCraftP Fly")
}type Figther struct {weapon stringAirCraft
}func foo(action Action) {action.Fly()
}func main() {// 可以值或者指针ac := AirCraft{}foo(ac)foo(&ac)// 只能以指针传入acP := AirCraftP{}foo(&acP)// 内嵌类型也可以f := Figther{}foo(f)foo(&f)
}
Golang结构体与面向对象相关推荐
- golang 结构体简介
Go 通过类型别名(alias types)和结构体的形式支持用户自定义类型,或者叫定制类型.试图表示一个现实世界中的实体. 结构体由一系列命名的元素组成,这些元素又被称为字段,每个字段都有一个名称和 ...
- c++ 结构体初始化_单片机C语言 - 基于结构体的面向对象编程技巧
单片机C语言 - 基于结构体的面向对象编程技巧 一.面向对象 面向对象是软件开发方法,是相对于面向过程来讲的.通过把数据与方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式 ...
- go结构体初始化_浅谈golang结构体偷懒初始化
运行一段程序,警告: service/mysqlconfig.go:63::error: golang.guazi-corp.com/tools/ksql-runner/model.CreatingM ...
- golang 结构体struct、数组、结构体数组 定义与赋值 、json string转struct
文章目录 1.结构体struct 1.1 声明结构体 1.2 初始化结构体 以及 传参 2. 结构体数组.append 3. 接口返回 含数组的结构体 常用写法 json string转struct ...
- go语言初体验(流程控制、range遍历、函数、结构体、面向对象)
一.流程控制 // main package mainimport ("fmt" )func main() {x := 2switch x {case 1:fmt.Print(&q ...
- Golang结构体和map
Golang 文章目录 Golang 1 struct 2 map 3 struct补充 1 struct 在Golang中没有对象,但是有面向对象的思想,有继承,多态,封装的思想. 但是缺少了cla ...
- Go语言自学系列 | golang结构体
视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...
- mysql表结构 转 golang 结构体struct
在线转 https://dev.ataotaoa.com 本地转换(推荐) github地址: https://github.com/gohouse/converter 下载地址: https://g ...
- golang 结构体 map 转化为 json
目录 结构体生成json json转成结构体 map生成json json转化为map 结构体生成json package mainimport ("encoding/json"& ...
最新文章
- 接口测试——postman
- 第十六届全国大学生智能汽车竞赛RT-Thread创新专项奖
- elinput内容过长显示悬浮框_element ui el-table 表头自定义,内容超出省略,悬浮时显示...
- 成为Web开发大师你必须知道的7件事情
- uniapp保存图片_Uniapp实现保存图片到相册(封装起来)
- centos7 redis5.0以前版本 部署集群示例 - 第二篇
- 使用spring-session外部化Spring-boot应用程序的会话状态
- asp用于取代什么技术_苹果Mini LED晶粒四季度量产,用于新iPad Pro,三安光电或成赢家...
- 信号集操作函数,信号未决、阻塞、递达
- pgpool-II的master-slave模式的分析
- Https之SSL原理
- CH Round #56 - 国庆节欢乐赛解题报告
- 电源大师课笔记 2.1
- Fortran入门——菜鸟级基础语法
- 数字图像处理 冈萨雷斯 中文第三版 习题
- 【电源科普】负载调整率
- js经纬度坐标和度分秒互转
- Unity项目优化——Web版
- 用 JPress 创建模板及发布文章
- 央视315曝光科技企业未击中痛点