结构体的声明

1
2
3
4
5
6
//声明Teacher结构体
type Teacher struct {
name string
age  int8
sex  byte
}

结构体的定义

方式1

//1、var声明方式实例化结构体,初始化方式为:对象.属性=值

1
2
3
4
var t1 Teacher
t1.name = "jonson"
t1.age = 35
t1.sex = 1

方式2

变量简短声明格式实例化结构体,初始化方式为:对象.属性=值

1
2
3
4
t2 := Teacher{}
t2.name = "olaya"
t2.age = 30
t2.sex = 1

方式3

3、变量简短声明格式实例化结构体,声明时初始化。初始化方式为:属性:值 。属性:值可以同行,也可以换行。(类似map的用法)

1
2
3
4
5
6
t3 := Teacher{
 name: "Josh",
 age:  28,
 sex:  1,
}
t3 = Teacher{name: "Josh2", age: 27, sex: 1}

方式4

变量简短声明格式实例化结构体,声明时初始化,不写属性名,按属性顺序只写属性值

1
t4 := Teacher{"Ruby", 30, 0}

方式5

创建指针类型的结构体

1
2
3
4
5
6
7
t5 := new(Teacher)
(*t5).name = "Running"
(*t5).age = 31
(*t5).sex = 0
t5.name = "Running2"
t5.age = 31
t5.sex = 0

方式6

匿名结构体

1
2
3
addr := struct {
 province, city string
}{"陕西省", "西安市"}

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package main

import "fmt"

//定义Teacher结构体
type Teacher struct {
name string
age  int8
sex  byte
}

func main() {
//1、var声明方式实例化结构体,初始化方式为:对象.属性=值
var t1 Teacher
fmt.Println(t1)
fmt.Printf("t1:%T , %v , %q \n", t1, t1, t1)
//if t1 == nil {
// fmt.Println()
//}
t1.name = "Steven"
t1.age = 35
t1.sex = 1
fmt.Println(t1)
fmt.Println("-------------------")

//2、变量简短声明格式实例化结构体,初始化方式为:对象.属性=值
t2 := Teacher{}
t2.name = "David"
t2.age = 30
t2.sex = 1
fmt.Println(t2)
fmt.Println("-------------------")

//3、变量简短声明格式实例化结构体,声明时初始化。初始化方式为:属性:值 。属性:值可以同行,也可以换行。(类似map的用法)
t3 := Teacher{
name: "Josh",
age:  28,
sex:  1,
}
t3 = Teacher{name: "Josh2", age: 27, sex: 1}
fmt.Println(t3)
fmt.Println("-------------------")

//4、变量简短声明格式实例化结构体,声明时初始化,不写属性名,按属性顺序只写属性值
t4 := Teacher{"Ruby", 30, 0}
fmt.Println(t4)
fmt.Println("-------------------")

//5、创建指针类型的结构体
t5 := new(Teacher)
fmt.Printf("t5:%T , %v , %p \n", t5, t5, t5)
//(*t5).name = "Running"
//(*t5).age = 31
//(*t5).sex = 0

//语法简写形式——语法糖
t5.name = "Running2"
t5.age = 31
t5.sex = 0
fmt.Println(t5)
fmt.Println("-------------------")
}

结构体匿名字段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package main

import "fmt"

type User struct {
//name string
//sex byte
//age int8
//height float64
//weight float64
string
byte
int8
float64

}

func main() {
// 实例化结构体
user:= User{"jonson" , 'm' , 35 , 177.5}
fmt.Println(user)
//如果想依次输出姓名、年龄、身高、性别
fmt.Printf("姓名:%s \n" , user.string)
fmt.Printf("身高:%.2f \n" , user.float64)
fmt.Printf("性别:%c \n" , user.byte)
fmt.Printf("年龄:%d \n" , user.int8)
}

go语言渐入佳境[15]-struct声明与定义_go