go基础入门(五)

时间:2022-06-26
本文章向大家介绍go基础入门(五),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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

来看一下第一个例子

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作为在工厂中的编号

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的信息。那么如何实现完整信息输出呢?当然是需要覆写方法啦

func (worker Worker)show(){
  fmt.Println("workerId:"+worker.WorkId)
  worker.Person.show()
}

组合

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

type Student struct {
  Person Person
  StudId string
  Depart string
}

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

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

func (stu Student)show(){
  fmt.Println("stu:",stu.StudId,"depart:"+stu.Depart)
  stu.Person.show()
}