可以使用

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

golang 对结构体进行格式化输出的更多相关文章

  1. golang结构体json格式化的时间格式

    golang结构体json格式化的时间格式 在我们开发中,经常会解析time.Time 往往前台传过来的时候,是个string 但是我们希望在结构体转成time.Time type Param str ...

  2. Golang 入门 : 结构体(struct)

    Go 通过类型别名(alias types)和结构体的形式支持用户自定义类型,或者叫定制类型.试图表示一个现实世界中的实体. 结构体由一系列命名的元素组成,这些元素又被称为字段,每个字段都有一个名称和 ...

  3. 将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct

    https://groups.google.com/forum/#!topic/golang-nuts/JkvR4dQy9t4 https://golang.org/misc/cgo/gmp/gmp. ...

  4. Golang操作结构体、Map转化为JSON

    结构体生成Json package main import ( "encoding/json" "fmt" ) type IT struct { Company ...

  5. golang(07)结构体介绍

    golang支持面向对象的设计,一般支持面向对象的语言都会有class的设计,但是golang没有class关键字,只有struct结构体.通过结构体达到类的效果,这叫做大成若缺,其用不弊. stru ...

  6. Golang通过结构体解析和封装XML

    Golang解析和封装XML 解析XML成结构体Demo package main import ( "encoding/xml" "fmt" ) //我们通过 ...

  7. 『GoLang』结构体与方法

    结构体 结构体类型 Go 通过结构体的形式支持用户自定义类型,或者叫定制类型. Go 语言结构体是实现自定义类型的一种重要数据类型. 结构体是复合类型(composite types),它由一系列属性 ...

  8. golang初始化结构体数组

    最近组里新项目要求用go来写,没办法只能边看文档边写代码,今天遇到郁闷的问题,查了好久最终发现居然是一个标点符号的导致的,遂纪录之 刚刚给一个接口写单元测试时想初始化一个结构体数组,然后遍历该数组并建 ...

  9. golang之结构体使用注意事项和细节

    1. 结构体的所有字段在内在中是连续的 2. 结构体是用户单独定义的类型,和其它类型进行转换时需要有完全相同的字段(名字.个数和类型) 3. 结构体进行type重新定义(相当于取别名),Golang认 ...

随机推荐

  1. node.js版本管理

    Node安装 Node的安装需要依赖很多,如gcc等,首先我们需要将这些安装成功,用rpm命令查看下,果然我们并没有gcc等,所以要用yum进行安装(基于centos6.9版本): yum -y in ...

  2. sparkStreaming运行yarn,提交任务报错

    op.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302) ...

  3. DC3求后缀数组板子

    #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk mak ...

  4. vue中的provide/inject的学习使用

    irst:定义一个parent component ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <template>  <div> ...

  5. PHP页面间传值的几种方法

    方法一:require_once //Page a: <?php $a = "hello"; ?> //Page b: <?php require_once &q ...

  6. Python3 序列解包

    转载自:https://blog.csdn.net/yilovexing/article/details/80576788 序列解包是 Python 3.0 之后才有的语法 什么是序列解包呢?先看一个 ...

  7. Shell学习之结合正则表达式与通配符的使用(五)

    Shell学习之结合正则表达式与通配符的使用 目录 通配符 正则表达式与通配符 通配符 通配符的使用 正则表达式 正则表达式 正则表达式的使用 通配符 正则表达式与通配符 正则表达式用来在文件中匹配符 ...

  8. JAVAScript:前端模块化开发

    目录 一:前端模块化概要 1.1.模块化概要 1.2.函数封装 1.3.对象封装 1.4.立即执行函数表达式(IIFE) 1.5.模块化规范 1.5.1.CommonJS 1.5.2.AMD((Asy ...

  9. webpack打包之有依赖js模块

    一.入口文件main.js var isd = require('./depend.js'); if(isd.isDepend){ console.log('有依赖模块'); } else { con ...

  10. 语音VLAN异常流量分析

    现象描述:有线网络里,接入层交换机上,凡是被划入语音vlan的端口,都会呈现出相同的流量表现,而且瞬间流量都很大,30 - 40 MB级别,对有线网络的稳定性有很大的影响. 设备型号: IP 电话:A ...