golang 中的结构体

发布于 / 1年前 - 更新于 / 1年前


前言

golang 中没有 class 的定义或概念,那么golang中如何去实现class的概念呢?
当然是struct结构体了

结构体的定义

type identifier struct { field1 type1 field2 type2 ... }

结构体的定义非常简单,{}里面则定义结构体的属性,该属性可以是任何类型,如:接口,结构体等

代码片段一

  1. 首先定义了一个结构体和一个构造结构体的方法,代码如下
package help import ( "strconv" ) //学生结构体 type student struct { name string age int } func NewStudent(name string, age int) *student { return &student{name, age} } func (s *student) GetInfo() string { return "学生" + s.name + "的年龄是" + strconv.Itoa(s.age) }
  1. 上面结构体创建好了,那么下面就可以调用了
package main import ( "demo/help" "fmt" ) func main() { student := help.NewStudent("无言", 18) info := student.GetInfo() fmt.Println(info) }

以上先调用一个NewStudent函数获取到一个student结构体的实例,并且赋上基础值,再调用 GetInfo
这像不像 new 一个带有构造函数的 class ,然后调用 class 中的函数。对,你想的没错。

代码片段二

  1. 我们重新构建 StudentGrade 结构体,代码如下
package help //成绩 type Grade struct { Chinese int Math int English int } //学生,包含成绩结构体 type Student struct { Name string Age int Grade } //学生结构体函数 设置学生信息 func (s *Student) SetInfo(name string, age int) { s.Name = name s.Age = age } //成绩结构体函数 设置成绩 func (g *Grade) SetGrade(chinese int, math int, english int) { g.Chinese = chinese g.Math = math g.English = english }
  1. 再看如下调用方式
    main.go
package main import ( "demo/help" "fmt" ) func main() { // 实例化学生结构体 stu := new(help.Student) // 设置学生信息 stu.SetInfo("wuyan", 18) // 设置学生成绩 stu.SetGrade(99, 100, 59) // 最终打印 fmt.Printf("学生:%s,年龄:%d,语文成绩:%d,数学成绩:%d,英语成绩:%d,", stu.Name, stu.Age, stu.Chinese, stu.Math, stu.English) }

上面的 stu 为什么能调用 Grate 结构体的函数 SetGrade
因为 Student 结构体包含了 Grade 结构体,也就可以调用 GradeSetGrade
这像不像 class 的继承关系

未完待续…

本作品采用《CC 协议》,转载必须注明作者和本文链接