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

前言

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

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

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

安装:

go get github.com/k0kubun/pp/v3

完整示例代码:

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:  "程序员"
  }
}

个性化配置示例:

// 全局配置
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 —— 功能丰富调试打印

安装:

go get github.com/gookit/goutil/dump

完整示例代码:

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: "产品经理"
    }
}

个性化配置示例:

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)
posted @ 2026-07-24 13:57  牛奔  阅读(3)  评论(0)    收藏  举报