有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性。显然单独定义以上变量比较繁琐,数据不便于管理。
结构体是一种聚合的数据类型,它是由一系列具有相同类型或不同类型的数据构成的数据集合。每个数据称为结构体的成员。
如果结构体的全部成员都是可以比较的,那么结构体也是可以比较的,那样的话两个结构体将可以使用 == 或 != 运算符进行比较,但不支持 > 或 < 。
func main() { s1 := Student{1, "mike", 'm', 18, "sz"} s2 := Student{1, "mike", 'm', 18, "sz"} fmt.Println("s1 == s2", s1 == s2) //s1 == s2 true fmt.Println("s1 != s2", s1 != s2) //s1 != s2 false }Go语言对关键字的增加非常吝啬,其中没有private、 protected、 public这样的关键字。
要使某个符号对其他包(package)可见(即可以访问),需要将该符号定义为以大写字母 开头。
目录结构:
test.go示例代码如下:
//test.go package test //student01只能在本文件件引用,因为首字母小写 type student01 struct { Id int Name string } //Student02可以在任意文件引用,因为首字母大写 type Student02 struct { Id int name string }main.go示例代码如下:
// main.go package main import ( "fmt" "test" //导入test包 ) func main() { //s1 := test.student01{1, "mike"} //err, cannot refer to unexported name test.student01 //err, implicit assignment of unexported field 'name' in test.Student02 literal //s2 := test.Student02{2, "yoyo"} //fmt.Println(s2) var s3 test.Student02 //声明变量 s3.Id = 1 //ok //s3.name = "mike" //err, s3.name undefined (cannot refer to unexported field or method name) fmt.Println(s3) }