inline这个属性,应该是默认的,为什么这么说,这个属性用作嵌套结构体内,消除嵌套结构体的层级关系,将其转为一个层级。

这里TestField加不加inlineflag,字段都和第一层字段保持在同一级,但如果是注释中的写法,inline字段也不起作用。

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
type TestField struct {
Key string `json:"key"`
}

//type TopField struct {
// T TestField `json:",omitempty"`
// TestA string `json:"test_a"`
// TestB string `json:"test_b"`
//}

type TopField struct {
TestField `json:",omitempty,inline"`
TestA string `json:"test_a"`
TestB string `json:"test_b"`
}

func main() {
one := TopField{
TestField: TestField{
Key: "12321",
},
TestA: "a",
TestB: "b",
}

marshal, _ := json.Marshal(one)
fmt.Println(string(marshal))
}

// {"key":"12321","test_a":"a","test_b":"b"}