golang構造体のフォーマット出力
1881 ワード
使用可能
`return fmt.Sprintf("%+v", *conf) `
をクリックして、構造体のkey値を含む構造体を印刷します.ただし,構造体は容量が多く,いずれも1行であるため,出力構造体をフォーマットできることが望ましい.
実は構造体に対応するデフォルトのjson構造を受け取って、jsonのフォーマットを行うことができます
出力結果:
予想通りに複雑になったのでreflect反射を利用して自分でやりたいのですが、デフォルトのjson反射はこれをやってくれて、いいですね!
転載先:https://www.cnblogs.com/ayanmw/p/8677453.html
`return fmt.Sprintf("%+v", *conf) `
をクリックして、構造体のkey値を含む構造体を印刷します.ただし,構造体は容量が多く,いずれも1行であるため,出力構造体をフォーマットできることが望ましい.
実は構造体に対応するデフォルトの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