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