结构体和内嵌类型

结构体是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结构体与面向对象相关推荐

  1. golang 结构体简介

    Go 通过类型别名(alias types)和结构体的形式支持用户自定义类型,或者叫定制类型.试图表示一个现实世界中的实体. 结构体由一系列命名的元素组成,这些元素又被称为字段,每个字段都有一个名称和 ...

  2. c++ 结构体初始化_单片机C语言 - 基于结构体的面向对象编程技巧

    单片机C语言 - 基于结构体的面向对象编程技巧 一.面向对象 面向对象是软件开发方法,是相对于面向过程来讲的.通过把数据与方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式 ...

  3. go结构体初始化_浅谈golang结构体偷懒初始化

    运行一段程序,警告: service/mysqlconfig.go:63::error: golang.guazi-corp.com/tools/ksql-runner/model.CreatingM ...

  4. golang 结构体struct、数组、结构体数组 定义与赋值 、json string转struct

    文章目录 1.结构体struct 1.1 声明结构体 1.2 初始化结构体 以及 传参 2. 结构体数组.append 3. 接口返回 含数组的结构体 常用写法 json string转struct ...

  5. go语言初体验(流程控制、range遍历、函数、结构体、面向对象)

    一.流程控制 // main package mainimport ("fmt" )func main() {x := 2switch x {case 1:fmt.Print(&q ...

  6. Golang结构体和map

    Golang 文章目录 Golang 1 struct 2 map 3 struct补充 1 struct 在Golang中没有对象,但是有面向对象的思想,有继承,多态,封装的思想. 但是缺少了cla ...

  7. Go语言自学系列 | golang结构体

    视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...

  8. mysql表结构 转 golang 结构体struct

    在线转 https://dev.ataotaoa.com 本地转换(推荐) github地址: https://github.com/gohouse/converter 下载地址: https://g ...

  9. golang 结构体 map 转化为 json

    目录 结构体生成json json转成结构体 map生成json json转化为map 结构体生成json package mainimport ("encoding/json"& ...

最新文章

  1. 接口测试——postman
  2. 第十六届全国大学生智能汽车竞赛RT-Thread创新专项奖
  3. elinput内容过长显示悬浮框_element ui el-table 表头自定义,内容超出省略,悬浮时显示...
  4. 成为Web开发大师你必须知道的7件事情
  5. uniapp保存图片_Uniapp实现保存图片到相册(封装起来)
  6. centos7 redis5.0以前版本 部署集群示例 - 第二篇
  7. 使用spring-session外部化Spring-boot应用程序的会话状态
  8. asp用于取代什么技术_苹果Mini LED晶粒四季度量产,用于新iPad Pro,三安光电或成赢家...
  9. 信号集操作函数,信号未决、阻塞、递达
  10. pgpool-II的master-slave模式的分析
  11. Https之SSL原理
  12. CH Round #56 - 国庆节欢乐赛解题报告
  13. 电源大师课笔记 2.1
  14. Fortran入门——菜鸟级基础语法
  15. 数字图像处理 冈萨雷斯 中文第三版 习题
  16. 【电源科普】负载调整率
  17. js经纬度坐标和度分秒互转
  18. Unity项目优化——Web版
  19. 用 JPress 创建模板及发布文章
  20. 央视315曝光科技企业未击中痛点

热门文章

  1. PL-SLAM Real-time monocular visual SLAM with points and lines
  2. 计算机算法设计与分析 大学生电影节观影问题
  3. ubuntu14.04设置sublime text3为默认文本编辑器
  4. 算法导论 思考题9-2
  5. 机器学习中二分类逻辑回归的学习笔记
  6. Java中的资源文件加载方式
  7. Github的README中插入图片,Github仓库项目主页显示图片
  8. Altium AD20更改原理图背景颜色
  9. UI数据缓冲层的设计(-)
  10. 我也说说刘谦在2010年春晚上的魔术作假