1. package main
  2.  
  3. import (
  4. "fmt"
  5. )
  6.  
  7. type test struct{} //空的结构体
  8.  
  9. type person struct {
  10. name string
  11. age int
  12. }
  13.  
  14. type student struct { //结构体嵌套
  15. name string
  16. age int
  17. contact struct {
  18. phone, city string
  19. num int
  20. }
  21. }
  22.  
  23. type teacher struct { //匿名字段
  24. string
  25. int
  26. }
  27.  
  28. func main() {
  29. a := test{}
  30. fmt.Println(a) //{}
  31.  
  32. p := person{}
  33. fmt.Println(p) //{ 0}
  34. p.name = "joi"
  35. p.age =
  36. fmt.Println(p) //{joi 19}
  37. fmt.Println(p.name) //joi
  38.  
  39. p1 := person{
  40. name: "lll",
  41. age: ,
  42. }
  43. fmt.Println(p1) // {lll 32}
  44. fmt.Println(p1.name) //lll
  45.  
  46. A(p1)
  47. fmt.Println(p1.age) //32,值拷贝,不是引用传递
  48.  
  49. A1(&p1)
  50. fmt.Println(p1.age) //888,指针传递,
  51.  
  52. p2 := &person{ //p2就是指向结构体的地址了,以后和传递就是指针传递了,
  53. name: "kkk",
  54. age: ,
  55. }
  56.  
  57. A1(p2)
  58. p2.name = "OK" //p2是一个地址,这里不需要用*p2 = "OK"
  59. fmt.Println(p2.name) //OK,
  60.  
  61. b := struct { //匿名结构体
  62. name string
  63. age int
  64. }{
  65. name: "uuu",
  66. age: ,
  67. }
  68. fmt.Println(b) //{uuu 19}
  69.  
  70. //匿名结构体
  71. c := &struct {
  72. name string
  73. age int
  74. }{
  75. name: "eee",
  76. age: ,
  77. }
  78. fmt.Println(c) //&{eee 29}
  79.  
  80. d := student{}
  81. fmt.Println(d) //{ 0 { 0}}
  82. d = student{
  83. name: "dd",
  84. age: ,
  85. }
  86. d.contact.city = "sity"
  87. d.contact.num =
  88. d.contact.phone = "phone" //里面的结构体只能够分部赋值
  89. fmt.Println(d) //{dd 1 {phone sity 9}}
  90.  
  91. e := teacher{"tec", } //依靠顺序传值
  92. fmt.Println(e) //{tec 52}
  93. var e1 teacher
  94. e1 = e
  95. fmt.Println(e1) //{tec 52},结构体可以直接赋值
  96. }
  97.  
  98. func A(per person) {
  99. per.age =
  100. fmt.Println(per.age) //
  101. }
  102.  
  103. func A1(per *person) {
  104. per.age =
  105. fmt.Println(per.age) //
  106. }
  1. package main
  2.  
  3. /*
  4. 结构struct
  5.  
  6. Go 中的struct与C中的struct非常相似,并且Go没有class,
  7. struct代替了class的位置但是没有代替class的功能,因为go没有继承的概念
  8. 使用 type <Name> struct{} 定义结构,名称遵循可见性规则
  9. 支持指向自身的指针类型成员
  10. 支持匿名结构,可用作成员或定义成员变量
  11. 匿名结构也可以用于map的值
  12. 可以使用字面值对结构进行初始化
  13. 允许直接通过指针来读写结构成员
  14. 相同类型的成员可进行直接拷贝赋值
  15. 支持 == 与 !=比较运算符,但不支持 > 或 <
  16. 支持匿名字段,本质上是定义了以某个类型名为名称的字段
  17. 嵌入结构作为匿名字段看起来像继承,但不是继承
  18. 可以使用匿名字段指针
  19.  
  20. */
  21.  
  22. import (
  23. "fmt"
  24. )
  25.  
  26. //实现继承,嵌入结构(组合)
  27. type human struct {
  28. sex int
  29. }
  30.  
  31. type teacher struct {
  32. human
  33. name string
  34. age int
  35. }
  36.  
  37. type student struct {
  38. human
  39. name string
  40. age int
  41. }
  42.  
  43. func main() {
  44. a := teacher{name: "teac", age: }
  45. b := student{name: "stud", age: }
  46. fmt.Println(a, b) //{{0} teac 32} {{0} stud 18}
  47.  
  48. a1 := teacher{name: "teac", age: , human: human{sex: }}
  49. b1 := student{name: "stud", age: , human: human{sex: }}
  50. fmt.Println(a1, b1) //{{1} teac 32} {{1} stud 18}
  51. a1.age =
  52. a1.human.sex = //a1.sex = 200也可以,因为human的字段就已经是teacher和student的属性了,
  53. fmt.Println(a1, b1) //{{100} teac 88} {{1} stud 18}
  54. }

go语言没有class,struct就是go语言的class.

go10---struct的更多相关文章

  1. 使用struct处理二进制

    有的时候需要用python处理二进制数据,比如,存取文件.socket操作时.这时候,可以使用python的struct模块来完成. struct模块中最重要的三个函数是pack(), unpack( ...

  2. golang struct扩展函数参数命名警告

    今天在使用VSCode编写golang代码时,定义一个struct,扩展几个方法,如下: package storage import ( "fmt" "github.c ...

  3. go-使用 unsafe 修改 struct 中的 field 的值

    以下是方法,不要纠结原理,等东西积累多了,你才有能力纠结原理: 首先,你需要有一个这样的函数,这是在 nsq 的源码里直接抄过来的: func unsafeValueOf(val reflect.Va ...

  4. C语言中struct位域的定义和使用

    位域的定义和使用 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空间,并使处理简便,C语言又 ...

  5. C# Struct结构体里数组长度的指定

    typedef struct Point{ unsigned short x; unsigned short y; }mPoint;//点坐标 typedef struct Line{ mPoint ...

  6. C 语言Struct 实现运行类型识别 RTTI

    通过RTTI,能够通过基类的指针或引用来检索其所指对象的实际类型.c++通过下面两个操作符提供RTTI. (1)typeid:返回指针或引用所指对象的实际类型.    (2)dynamic_cast: ...

  7. VC++ : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::basic_string<wchar_t,struct std::char_traits<wchar_t>

    最近学习Google Breakpad,将其用在了自己的项目中,编译的版本为VS2010,没有什么问题.但是为了和之前的程序兼容,需要使用VS2008版本的程序,于是又编译了VS2008版本的代码,但 ...

  8. 字节流与数据类型的相互转换---使用struct模块

    字节流与数据类型的相互转换---使用struct模块 http://blog.csdn.net/Sunboy_2050/article/details/5974029 Python是一门非常简洁的语言 ...

  9. 窥探Swift之别具一格的Struct和Class

    说到结构体和类,还是那句话,只要是接触过编程的小伙伴们对这两者并不陌生.但在Swift中的Struct和Class也有着令人眼前一亮的特性.Struct的功能变得更为强大,Class变的更为灵活.St ...

  10. struct 大小计算

    结构体是一种复合数据类型,通常编译器会自动的进行其成员变量的对齐,已提高数据存取的效率.在默认情况下,编译器为结构体的成员按照自然对齐(natural alignment)条方式分配存储空间,各个成员 ...

随机推荐

  1. cacheStorage缓存及离线开发

    案例地址:https://zhangxinxu.github.io/https-demo/cache/start.html 我们直接看一个例子吧,如下HTML和JS代码: <h3>一些提示 ...

  2. 1257 背包问题 V3(二分)

    1257 背包问题 V3 3 秒 131,072 KB 80 分 5 级题 题意 : 从n个物品中选出k个,使单位体积价值最大 思路: 一开始正面想,试过很多种,排序什么的..总是结果不对,最后想到二 ...

  3. 简述FTP主动模式与被动模式

    1 FTP工作模式 2 不同模式FTP面临的问题 3 主动模式的FTP连接建立连接主要步骤 客户端打开一个随机的端口(端口号大于1024,在这里,我们称它为x),同时一个FTP进程连接至服务器的21号 ...

  4. Buffer.isBuffer()详解

    Buffer.isBuffer(obj) obj {Object} 返回:{Boolean} 如果 obj 是一个 Buffer 则返回 true.

  5. Memcache 分布式存储 【一致性Hash】crc32

    class memcacheHash { private $_node = array(); private $_nodeData = array(); private $_keyNode = 0; ...

  6. 《机器学习实战》-逻辑(Logistic)回归

    目录 Logistic 回归 本章内容 回归算法 Logistic 回归的一般过程 Logistic的优缺点 基于 Logistic 回归和 Sigmoid 函数的分类 Sigmoid 函数 Logi ...

  7. LeetCode(60) Permutation Sequence

    题目 The set [1,2,3,-,n] contains a total of n! unique permutations. By listing and labeling all of th ...

  8. jquery给span赋值

    span是最简单的容器,可以当作一个形式标签,其取值赋值方法有别于一般的页面元素. //赋值 $("#spanid").html(value) //取值 $("#span ...

  9. 转 POJ分类

    OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094)初期: 一. ...

  10. P2819 图的m着色问题 洛谷

    https://www.luogu.org/problem/show?pid=2819 题目背景 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使 ...