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)
相关推荐
桦说编程20 小时前
并发编程中的等待-通知模式:从 wait/notify 到 Guava Monitor
后端
hsjiasb20 小时前
FreeRTOS学习(二十七)——任务栈与栈溢出检测
开发语言·stm32·学习·学习笔记·freertos
丰锋ff21 小时前
3.1 Qt事件之事件处理器
开发语言·qt
多弗朗皮卡丘21 小时前
C语言梦开始的地方7:函数
c语言·开发语言
月华路1 天前
G1 垃圾回收:脏卡队列、记忆集与并发精化线程机制
java·开发语言
用户938515635071 天前
工厂模式与 Nest.js 核心思想 —— 从蜜雪冰城到企业级架构
后端·设计模式·nestjs
用户938515635071 天前
实战 Todo CRUD —— 从路由到异常,手写一个完整模块
后端·typescript·nestjs
gugucoding1 天前
47. 【Java】Java内存模型(JMM)与可见性
java·开发语言
m0_380743871 天前
从零调用 Claude 教程
开发语言·python·node.js
GetcharZp1 天前
Qdrant 向量数据库 Golang 实战指南:从零构建高性能检索应用
后端