golang 对结构体进行格式化输出
你看到的这个文章来自于http://www.cnblogs.com/ayanmw
可以使用
`return fmt.Sprintf("%+v", *conf) `
来打印结构体,包括结构体的key值。但是由于结构体内容较多,都在一行,所以希望可以格式化输出结构体。
其实可以接住结构体对应的默认json结构,来进行json的格式化
|
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
|
package mainimport ( "bytes" "encoding/json" "fmt")type RedisConfig struct { IP string PORT string AUTH int PASS string}type DbConfig struct { Host string Port int Uid string Pwd string DbName string}//Config 游戏服务器的配置type Config struct { ServerId int Port int //端口号 Redis *RedisConfig DbConfigs map[string]*DbConfig //如果配置多个数据库源,则用逗号分隔源的名字 callbacks []func()}func (conf *Config) String() string { b, err := json.Marshal(*conf) if err != nil { return fmt.Sprintf("%+v", *conf) } var out bytes.Buffer err = json.Indent(&out, b, "", " ") if err != nil { return fmt.Sprintf("%+v", *conf) } return out.String()}func main(){ conf:=Config{ ServerId:1, Port:8080, Redis:&RedisConfig{}, DbConfigs: map[string]*DbConfig{ "maindb": &DbConfig{ Host:"127.0.0.1", } , }, } fmt.Println("Config:",conf.String())} |
输出结果为:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
Config: { "ServerId": 1, "Port": 8080, "Redis": { "IP": "", "PORT": "", "AUTH": 0, "PASS": "" }, "DbConfigs": { "maindb": { "Host": "127.0.0.1", "Port": 0, "Uid": "", "Pwd": "", "DbName": "" } }} |
符合预期,本来想的复杂了,想要 利用reflect反射来自己做这个事情,但是默认的json反射就把这个给做了,好好好!

浙公网安备 33010602011771号