前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go基础入门(五)

go基础入门(五)

作者头像
大话swift
发布2019-07-16 17:32:27
2600
发布2019-07-16 17:32:27
举报
文章被收录于专栏:大话swift大话swift

之前的四篇文章我们学习的都是一些常规的语法特性,比如:基础数据类型,函数,异常处理等,今天我们说说表现力更加丰富的struct。关于struct这部分我们可能要分两到三节来叙述,至于大纲内容就保持神秘一下。好了开始我们的第一个struct吧。

来看一下第一个例子

代码语言:javascript
复制
type Person struct {
  Name string
  Age  int
}

func (person Person) show() {
  fmt.Println("name:"+person.Name, "age:"+strconv.Itoa(person.Age))
}
func main() {
  person := Person{Name: "Lee", Age: 30,}
  person.show()
}

我们定义了一个简单的结构体Person添加了结构体方法实现了简单的输出信息。而对于Person来说可能会衍生出更加复杂具体的:学生 老师 工人等这些衍生出的职业会附带更加复杂的关系,那么go是怎么解决这些更加复杂的衍生关系呢?

1 继承

2 组合

继承

go中的结构体可以实现继承.我们拿Woker作为实例扩展:添加WokerId作为在工厂中的编号

代码语言:javascript
复制
type Worker struct {
  Person
  WorkId string
}


func main() {
  person := Person{Name: "Lee", Age: 30,}
  worker := Worker{Person: person, WorkId: "W123"}
  worker.show()
}

上栗中我们看到woker完美的继承了show方法,但是只是展示了父结构体的信息而确实woker的信息。那么如何实现完整信息输出呢?当然是需要覆写方法啦

代码语言:javascript
复制
func (worker Worker)show(){
  fmt.Println("workerId:"+worker.WorkId)
  worker.Person.show()
}

组合

上面我们使用继承实现了衍生的扩展,接下来我们使用组合来打到衍生的目的:学生有学号和所属学院。我们用组合看看

代码语言:javascript
复制
type Student struct {
  Person Person
  StudId string
  Depart string
}

  //实例
  stu:=Student{Person:person,StudId:"Stu123",Depart:"IT"}
  stu.Person.show()

采用组合的方式对于初始化我们看到方式是类似,但是由于是组合不会将自然的继承来Person的方法,只能通过调用成员来去调用对应的实现相应的输出

代码语言:javascript
复制
func (stu Student)show(){
  fmt.Println("stu:",stu.StudId,"depart:"+stu.Depart)
  stu.Person.show()
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大话swift 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档