zoukankan      html  css  js  c++  java
  • 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反射就把这个给做了,好好好!

  • 相关阅读:
    线性回归问题
    聚类:层次聚类
    聚类:(K-means)算法
    神经网络算法
    AutoEventWireup解释
    asp.net中runat="server"的含义
    十步完全理解SQL
    sqlserver中分区函数 partition by的用法
    被忽略却很有用的html标签
    net中使用母版页
  • 原文地址:https://www.cnblogs.com/ayanmw/p/8677453.html
Copyright © 2011-2022 走看看