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 main
 
import (
    "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反射就把这个给做了,好好好!

 

posted @ 2022-02-18 14:34  安妮顿熊  阅读(521)  评论(0)    收藏  举报