golang-结构体与指针

1.结构体

  结构体是一系列具有指定数据类型的数据类型 ,就是一个结构体中存储多个不同类型的数据字段 ,用于创建传递复杂数据结构

  结构体可以理解为面向对象的模板 ,但是go并非面向对象 ,结构体只是一种新的数据类型

2.结构体创建

  结构体实例的数据字段不赋值 ,默认就是该类型的零值

  嵌套结构体可以完成更为复杂的操作 ,就是一个结构体某个字段是另一个结构体类型

  结构体可以使用 关键字var创建   

 1 package main
 2 
 3 import (
 4     "fmt"
 5 )
 6 
 7 type Computer struct {
 8     Vendor Ven
 9     Cpu    string
10     Mem    string
11     Disk   string
12 }
13 
14 type Ven struct {
15     Name    string
16     address string
17 }
18 
19 func main() {
20     V1 := Ven{
21         Name:"Inter",
22         address:"美国"}
23     C1 := Computer{
24         Vendor: V1,
25         Cpu:    "core i9",
26         Mem:    "金士顿",
27         Disk:   "三星",
28     }
29     var C2 Computer
30     fmt.Println(C2.Cpu=="")   //go会默认赋零值""
31     C2.Vendor = V1
32     C2.Cpu = "core i7"
33     C2.Mem = "三星"
34     C2.Disk = "三星"
35 
36     fmt.Println(C1.Vendor,C2.Disk)
37 
38 
39 }
View Code

3.公有私有

  go的结构体和他本身的字段都可能被导出使用 ,规定首字母大写可以导出

4.区分值引用与指针引用

  值引用是创建副本 ,原始值与新值没关系

  指针引用是通过指针指向原值的内存位置 ,修改会影响原值

  如果想通过引用修改原值使用指针 ,否则使用值引用

 1 package main
 2 
 3 import "fmt"
 4 
 5 type Ven struct {
 6     Name    string
 7     address string
 8 }
 9 
10 func main() {
11     a1 := Ven{
12         Name:    "亚马逊",
13         address: "美国",
14     }
15 
16     b1 := &a1 //指针引用
17     b2 := a1
18 
19     fmt.Println(a1.Name,b1.Name,b2.Name)
20     a1.Name = "微软"
21     fmt.Println(a1.Name,b1.Name,b2.Name)  
22     //亚马逊 亚马逊 亚马逊
23     //微软 微软 亚马逊
24 }
View Code

 

 

 

  

posted @ 2019-10-28 18:16  屈冠文  阅读(2113)  评论(0编辑  收藏  举报