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)
相关推荐
你三大爷几秒前
Netty / Kafka / Redis 保序问题的源码对比与 NIO 框架主流解法
后端·架构
特立独行的猫A2 分钟前
一份 Markdown 发十个平台:cspub 一稿多投
java·后端·python
3DGISer9 分钟前
不透明物体的渲染算法
后端
ServBay34 分钟前
从代码到上线,Cursor Live Apps 能替独立开发者做什么
后端·ai编程·cursor
程序员cxuan37 分钟前
LobeHub 是真的夯,简直 Super-Agent 最佳实现。
人工智能·后端·程序员
挖坑的张师傅1 小时前
开源一个 Managed Agents 云端托管智能体平台
后端·agent
挖坑的张师傅2 小时前
Agent 基建系列:用 MCP Tunnel 让云端 Agent 访问企业内网工具
后端·agent
量化分析码农2 小时前
【Python量化多因子实战 04】因子暴露不是 alpha:市值与行业中性化实战
前端·后端
挖坑的张师傅2 小时前
开源 yourbatis:把 MyBatis 的动态 SQL 体验带到 Go
后端·agent
挖坑的张师傅2 小时前
Agent 基建系列:E2B Go SDK
后端·agent