Golang은 구조체를 포맷하여 출력합니다

1885 단어
사용 가능
`return fmt.Sprintf("%+v", *conf) `
구조체의 키 값을 포함하여 구조체를 인쇄합니다.그러나 구조체 내 용량이 비교적 많고 한 줄에 있기 때문에 출력 구조체를 포맷할 수 있기를 바란다.
사실 구조체에 대응하는 기본 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": ""
        }
    }
}

예상대로 복잡해졌어요. 리플렉스 반사로 이 일을 하려고 했는데 기본 json 반사로 이걸 했어요. 좋아요!
 
전재 대상:https://www.cnblogs.com/ayanmw/p/8677453.html

좋은 웹페이지 즐겨찾기