去语言中结构结构体的使用

  

一、结构的特点

  
      <李> 1,用来自定义复杂数据结构李   <李> 2,结构体里面可以包含多个字段(属性)   <李> 3,struct类型可以定义方法,注意和函数的区分   <李> 4,struct类型是值类型李   <李> 5,struct类型可以嵌套   <李> 6,语言没有类类型,只有struct类型李   
  

二、结构的定义

  

1,结构声明:

  
 <代码>类型标识符结构{
  名称字符串
  年龄int
  分数int
  } 
  

2,结构中字段访问:和其他语言一样,使用点
例子

  
 <代码>类型学生结构体{
  名称字符串
  年龄int
  分数int
  }
  
  函数main () {
  var stu学生
  斯图。Name="李雷"
  斯图。年龄=22
  斯图。分数=20
  fmt。Printf (" name=% s的年龄=% d分数=% d”, stu.Name, stu.Age, stu.Score)
  } 
  

3, struct定义的三种形式:
: var stu学生
b: var stu =new学生(学生)
c: var stu
=学生及学生{}
(1)其中b和c返回的都是指向结构体的指针,访问形式如下
stu.Name, stu.Age和斯图。分数或者( stu) . name ( stu) .Age (* stu) .Scroe

  

三、结构的初始化

  
1,结构体的内存布局:结构体中的所有字段在内存是连续的,布局如下:
  

类型通过Rect1 struct{最小、最大点}
Rect2 struct类型{最小,最大*点}

  
2,链表定义h5> <代码>类型学校结构{   学校的名字   下一个*学校   }   

每个节点包含下一个节点的地址,这样把所有的节点串起来,通常把链表的第一个节点叫做链表头

  
3,双链表定义h5> <代码>类型学校结构{   名称字符串   下一个*学校   学校:*   }   

如果有两个指针分别指向前一个节点和后一个节点叫做双链表。

  
4,二叉树定义h5> 类型学校结构{
名称字符串
左右学校
学校
}
如果每个节点有两个指针分别用来指向左子树和右子树,我们把这样的结构叫做二叉树

  

四、特殊自处

  
1,结构体是用户单独定义的类型,不能和其他类型进行强制转换h5> 2, golang中的结构没有构造函数,一般可以使用工厂模式来解决这个问题
  
 <代码>方案模型
  学生结构体类型{
  名称字符串
  年龄int
  }
  func NewStudent(姓名字符串,年龄int) *学生{
  返回,学生{
  名称:姓名、
  年龄:年龄,
  }
  } 
  
 <代码>包主要
  S:=new(学生)
  S:=model.NewStudent(“汤姆”,20) 
  
3,我们可以为结构体中的每个字段,写上一个标签。这个标签可以通过反射的机制获取到,最常用的场景就是json序列化和反序列化。
  
 <代码>类型学生结构体{
  名称字符串' json=懊帧?
  年龄字符串' json=澳炅洹?
  } 
  
4,结构体中字段可以没有名字,即匿名字段
  
 <代码>类型汽车结构{
  名称字符串
  年龄int
  }
  
  类型列车结构{
  车
  开始time.Time
  int
  }
   之前
  
5,匿名字段的冲突处理h5> <代码>类型汽车结构{   名称字符串   年龄int   }   类型列车结构{   车   开始time.Time   年龄int   }      输入一个struct {   一个整数   }   B型结构{   一个整数   b int   }   C型结构{   一个   B   }

去语言中结构结构体的使用