golang 对结构体进行格式化输出

可以使用

`return fmt.Sprintf("%+v", *conf) `

来打印结构体,包括结构体的key值。但是由于结构体内容较多,都在一行,所以希望可以格式化输出结构体。

其实可以接住结构体对应的默认json结构,来进行json的格式化

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())

}

  输出结果为:

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

 

转载于:https://www.cnblogs.com/ayanmw/p/8677453.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值