
1.结构体的概述
有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性。显然单独定义以上变量比较繁琐,数据不便于管理。一般用于全局变量
结构体是一种聚合的数据类型,它是由一系列具有相同类型或不同类型的数据构成的数据集合。每个数据称为结构体的成员。
2.结构体的初始化
//普通变量初始化type Person struct { name string sex string age int } func main(){ var man1 Person = Person{"Jerry","M",19} fmt.Println(man1) // 2.部分初始化 man2 := Person{name:"MM",age:20} fmt.Println(man2) // Index member variable "." fmt.Printf("man2.name = %q\n", man2.name) //man2.name = "MM" //单独初始化 var man3 Person man3.name = "mike" man3.sex = "M" man3.age = 99 fmt.Println("man3:", man3) man3.age = 1973 //可以修改 fmt.Println("man3:", man3)}指针变量初始化
type Student struct { ID int name string sex string age int addr string} func main() { var s1 *Student = &Student{ ID: 3, name: "Q", sex: "M", age: 29, addr: "hahaha", } s2 := &Student{ ID: 34, name: "W", sex: "M", age: 30, addr: "lalala", } fmt.Println(s1,s2)}3.结构体的比较
相同结构体类型(成员变量的类型、个数、顺序一致)变量之间可以直接赋值。结构体也是可以比较的,两个结构体将可以使用 == 或 != 运算符进行比较,但不支持 > 或 < 。
var p1 Creature = Creature{ name: "A", age: 10, sex: "M", } var p2 Creature = Creature{ name: "A", age: 10, sex: "M", } var p3 Creature = Creature{ name: "A", age: 30, sex: "M", } fmt.Println(p1 == p2) //false fmt.Println(p1 == p3) //false4 结构体的地址:
结构体变量的地址 == 结构体收个元素的地址 unSafe.Sizeof(变量名) ——> 此种类型的变量所占用的内存空间大小 将结构体变量的值拷贝一份,传递。 —— 几乎不用。 内存消耗大,效率低。5 结构体指针做函数返回值:
不能返回局部变量的地址。—— 局部变量保存栈帧上,函数调用结束后,栈帧释放。局部变量的地址,不再受系统保护,随时可能分配给其他程序。 可以返回局部变量的值 总结 以上是内存溢出为你收集整理的浅谈GO中的结构体全部内容,希望文章能够帮你解决浅谈GO中的结构体所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)