页首Html代码

返回顶部

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

 

转载请注明出处:http://www.cnblogs.com/ayanmw 我会很高兴的!

posted @   ayanmw  阅读(26649)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2012-03-30 ArcGIS坐标系之投影及坐标的理解(xian80 和 beijing54 许多投影名称的区别)

页脚Html代码

点击右上角即可分享
微信分享提示