页首Html代码

返回顶部

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

 

posted @ 2018-03-30 17:18  ayanmw  阅读(26582)  评论(1编辑  收藏  举报

页脚Html代码