Go语言中的结构体《二》
struct的注意点
结构体是用户单独定义的类型,不能和其他类型进行强制转换
1 |
|
struct中没有构造函数,一般可以使用工厂模式来解决这个问题
1 |
|
注意:make只用来创建map、slice、channel new用来创建值类型
struct中的tag
在Go中,如果一个struct需要被序列化成json,则需要其标识符和内部字段的首字母大写,否则Go自带的encoding/json包无法对其访问
而首字母大写后,序列化出的json中每个字段的首字母也会大写,这时候就需要使用tag来标识
- 未使用tag标识的代码如下:
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
29import (
"encoding/json"
"fmt"
)
type Student struct {
Name string
Age int
Score int
}
func test() {
var s *Student = &Student{
Name: "张三",
Age: 18,
Score: 61,
}
b, err := json.Marshal(s)
if err != nil {
fmt.Println(err)
}
fmt.Printf("%s\n", string(b))
}
func main() {
test()
}
---------------
{"Name":"张三","Age":18,"Score":61}使用tag对struct的字段进行标识:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25type Student struct {
//tag使用的是``反引号进行标识
Name string `json:"name"`
Age int `json:"age"`
Score int `json:"score"`
}
func test() {
var s *Student = &Student{
Name: "张三",
Age: 18,
Score: 61,
}
b, err := json.Marshal(s)
if err != nil {
fmt.Println(err)
}
fmt.Printf("%s\n", string(b))
}
func main() {
test()
}
-----------------
{"name":"张三","age":18,"score":61}注意!tag使用``反引号进行标识!
struct中的匿名字段
结构体中的字段可以没有名字,即匿名字段,匿名字段可以通过.类型的方式进行访问和赋值
1 | type Car struct { |