Go 如何打印调试深层或嵌套的结构体

前言

在 Go 开发中,遇到多层嵌套的结构体、map、slice 时,fmt.Println 的输出往往一团乱,很难快速看清结构。

下面介绍两个轻量好用的打印包,用简单代码示例帮你快速上手。

1. k0kubun/pp ------ 彩色美观打印

安装:

bash 复制代码
go get github.com/k0kubun/pp/v3

完整示例代码:

go 复制代码
package main

import (
    "github.com/k0kubun/pp/v3"
)

type Profile struct {
    City string
    Job  string
}

type User struct {
    Name    string
    Age     int
    Hobbies []string
    Profile Profile
}

func main() {
    u := User{
        Name:    "张三",
        Age:     28,
        Hobbies: []string{"游泳", "读书", "旅行"},
        Profile: Profile{
            City: "北京",
            Job:  "程序员",
        },
    }

    pp.Println(u)
}

输出效果(终端带颜色显示):

复制代码
{
  Name:    "张三",
  Age:     28,
  Hobbies: ["游泳", "读书", "旅行"],
  Profile: {
    City: "北京",
    Job:  "程序员"
  }
}

个性化配置示例:

go 复制代码
// 全局配置
pp.Default.SetColoringEnabled(false) // 关闭颜色
pp.Default.SetExportedOnly(true)     // 只显示导出字段
pp.Default.SetOmitEmpty(true)        // 省略空值

// 或者创建独立实例
mypp := pp.New()
mypp.SetColoringEnabled(false)
mypp.Println(u)

2. gookit/goutil/dump ------ 功能丰富调试打印

安装:

bash 复制代码
go get github.com/gookit/goutil/dump

完整示例代码:

go 复制代码
package main

import "github.com/gookit/goutil/dump"

type Profile struct {
    City string
    Job  string
}

type User struct {
    Name    string
    Age     int
    Hobbies []string
    Profile Profile
}

func main() {
    u := User{
        Name:    "李四",
        Age:     30,
        Hobbies: []string{"跑步", "游戏", "健身"},
        Profile: Profile{
            City: "上海",
            Job:  "产品经理",
        },
    }

    dump.P(u)
}

输出效果(清晰缩进):

复制代码
User{
    Name: "李四",
    Age: 30,
    Hobbies: []string{"跑步", "游戏", "健身"},
    Profile: Profile{
        City: "上海",
        Job: "产品经理"
    }
}

个性化配置示例:

go 复制代码
dump.Config(func(opts *dump.Options) {
    opts.NoColor = true      // 关闭颜色
    opts.IndentLen = 4       // 缩进空格数
    opts.MaxDepth = 10       // 最大嵌套深度
    opts.SkipPrivate = true  // 跳过私有字段
    opts.SkipNilField = true // 跳过 nil 字段
})

dump.P(u)

总结推荐

  • 想简单快速看结构 → 用 dump.P(v)
  • 想要彩色高亮好看 → 用 pp.Println(v)
相关推荐
红烧大青虫1 小时前
HarmonyOS应用开发实战:小事记 - 数据迁移策略:RDB 表结构变更的版本号管理与 onUpgrade 回调
后端·华为·harmonyos·鸿蒙系统
geovindu1 小时前
go: Iterative Algorithms
开发语言·后端·算法·golang·迭代算法
学逆向的1 小时前
汇编——JCC指令
开发语言·汇编·网络安全
mayaairi2 小时前
JS循环语句深度解析:嵌套for、while与do...while
开发语言·前端·javascript
阳光是sunny3 小时前
LangGraph实战教程:defer延迟节点——让收尾工作自动排到最后
前端·人工智能·后端
前端工作日常3 小时前
我学习到的Java中domain和dto区别
java·后端
kite01213 小时前
Go语言Map深度解析与最佳实践
开发语言·后端·golang
阳光是sunny3 小时前
LangGraph实战教程:控制流详解
前端·人工智能·后端
hold?fish:palm4 小时前
kv存储主从复制的设计与实现
c++·redis·后端