Go语言结构体

lf888 2018-11-20 原文

结构体:struct

结构体是一系列具有指定数据类型的数据字段,能够把单个变量引用一些列相关的值。

一、下面采用学生的个人信息来展示结构体的运用:

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. )
  6. type Student struct {
  7. Name string
  8. Age int
  9. Sex string
  10. }
  11. func StudentAdd() (ret Student) {
  12. ret =Student{
  13. Name:"jack",
  14. Age:28,
  15. Sex:"boy",
  16. }
  17. return
  18. }
  19.  
  20. func main() {
  21. fmt.Println(StudentAdd())
  22. }

  执行结果:{jack 28 boy}

(1)首先创建Student结构体,定义Name,Age,Sex等参数,(在go语言里,首写字母大写的变量、数据结构或者函数是可以被导出的,也就是共有的,小写开头的则是私有的变量、数据结构或者函数)

(2)定义StudentAdd函数,里面添加学生的信息,返回Student类型的结构体。

(3)main函数里面调用StudentAdd函数,输出本次添加的信息。

二、数据结构的嵌套

数据结构可以有很多层,也有很多结够体的属性相同或者包含关系,所以在建立数据结构的时候我们可以采用嵌套功能,减少很多代码的书写,提高代码的复用性。

下面举例说明:

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. type People struct {
  6. Name string
  7. Age int
  8. Sex string
  9. }
  10.  
  11. type Students struct {
  12. Information People
  13. Study string
  14. }
  15. type Teacher struct {
  16. Information People
  17. IsMarry bool
  18. Salary float32
  19. }
  20.  
  21. func main() {
  22. S:=Students{
  23. Information: People{Name:"Tom",
  24. Age:16,
  25. Sex:"boy", },
  26. Study:"学习高等数学",
  27. }
  28. T:=Teacher{
  29. Information:People{Name:"张三",Age:32,Sex:"男"},
  30. IsMarry:true,
  31. Salary:6556,
  32. }
  33. fmt.Println(S)
  34. fmt.Println(T)
  35. }

  执行结果:

{{Tom 16 boy} 学习高等数学}
{{张三 32 男} true 6556}

解释:定义了一个人的属性,有名字,年龄,性别。定义老师和学生,这两个对象都有人里面含有的属性,各自还有各自的属性,比如老师还有工资属性,结婚属性;学生有学习属性。由于这两个属性有相同的,直接嵌入人的结构体,节省了时间,减少了代码的重复率。

三、区别结构体的指针引用和值引用

指针指的是值的内存地址,改变指针的值,也就改变了原来数据的值;而值,改变值的值原来数据的值不变,下面用例子来说明:

(1)

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. )
  6. type Student struct {
  7. Name string
  8. Age int
  9. Sex string
  10. }
  11. func StudentAdd() (ret Student) {
  12. a:=Student{
  13. Name:"jack",
  14. Age:28,
  15. Sex:"boy",
  16. }
  17. b:=&a
  18. b.Name="Mike"
  19. ret=a
  20. return
  21. }
  22.  
  23. func main() {
  24. fmt.Println(StudentAdd())
  25. }

  输出结果:

{Mike 28 boy} {Mike 28 boy}

(2)

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. )
  6. type Student struct {
  7. Name string
  8. Age int
  9. Sex string
  10. }
  11. func StudentAdd() (ret1,ret2 Student) {
  12. a:=Student{
  13. Name:"jack",
  14. Age:28,
  15. Sex:"boy",
  16. }
  17. b:=a
  18. b.Name="Mike"
  19. ret1=a
  20. ret2=b
  21. return
  22. }
  23.  
  24. func main() {
  25. fmt.Println(StudentAdd())
  26. }

  输出结果:

{jack 28 boy} {Mike 28 boy}

解释:上面结果我只定义了b结构体,把a的指针内存地址传给b,然后修改b.Name参数的值,结果a也修改了;而值传值的话,b修改了,但是a的数据没有变化

posted on 2018-11-20 21:14 AllenLiang 阅读() 评论() 编辑 收藏

 

 
版权声明:本文为lf888原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/lf888/p/9991638.html

Go语言结构体的更多相关文章

随机推荐

  1. 2. 开关电源.电感

    1. 电感放电阶段 电感方程:V=L*dI/dt;电感储能:(L*I*I)/2  电容方程:I=C*dV/dt […]...

  2. mybatis-generator 详细配置及使用,爬坑记录

    mybatis-generator 详细配置及使用,爬坑记录 提示:如果不成功一定是项目路径和 数据库配置出问 […]...

  3. postman测试REST接口注意事项 – 时间朋友

    postman测试REST接口注意事项 postman在测试第三方REST接口,当POST请求内容要求为app […]...

  4. hibernate入门实例

    1. 环境配置 1.1 hiberante环境配置 hibernate可实现面向对象的数据存储。hiberna […]...

  5. Ubuntu server 16.04 mongodb和kafka安装及配置

    Ubuntu server 16.04 mongodb和kafka安装及配置 安装ubuntu server这 […]...

  6. 【软件测试基础】兼容性测试

    【软件测试基础】兼容性测试 2017-03-07 18:03  sophia194910  阅读(834)  […]...

  7. vux, vue上拉加载更多

    <template> <mt-loadmore :distanceIndex="4" :to […]...

  8. JAVAEE学期总结 – Sean521

    JAVAEE学期总结      声明:除第一张思维导图为博主所制作,其他思维导图皆来自网络,若侵权,望告知,必 […]...