V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
jxia
V2EX  ›  Go 编程语言

goutil/dump - 打印漂亮易读的 Go 数据

  •  1
     
  •   jxia · 2022-06-14 08:08:54 +08:00 · 1067 次点击
    这是一个创建于 690 天前的主题,其中的信息可能已经有所发展或是发生改变。

    goutil/dump - 是一个 golang 数据打印工具包,可以打印出漂亮易读的 go slice, map, struct 数据。

    主要功能:

    • 使用简单,直接调用 dump.P(vars...) 即可
    • 支持所有的基础数据类型
    • 支持 slice, map, struct 数据结构
    • 支持传入打印多个变量
    • 默认输出调用位置,方便使用
    • 支持自定义部分能力,如 缩进,色彩主题等

    效果预览:

    image

    Git Repo:

    打印基础类型

    package main
    
    import "github.com/gookit/goutil/dump"
    
    // rum demo:
    //     go run ./dump/_examples/basic_types.go
    func main() {
        dump.P(
            nil, true,
            12, int8(12), int16(12), int32(12), int64(12),
            uint(22), uint8(22), uint16(22), uint32(22), uint64(22),
            float32(23.78), float64(56.45),
            'c', byte('d'),
            "string",
        )
    }
    

    输出效果:

    image

    打印 slice

    打印 array, slice 都会一行一个元素输出,同时会在最后输出长度。

    package main
    
    import "github.com/gookit/goutil/dump"
    
    // rum demo:
    //     go run ./dump/_examples/slice.go
    func main() {
        dump.P(
            []byte("abc"),
            []int{1, 2, 3},
            []string{"ab", "cd"},
            []interface{}{
                "ab",
                234,
                []int{1, 3},
                []string{"ab", "cd"},
            },
        )
    }
    

    输出效果:

    image

    打印 map

    打印 map 数据结构,会一行一个元素输出,同时会在最后输出 map 长度。

    package main
    
    import "github.com/gookit/goutil/dump"
    
    // rum demo:
    //     go run ./map.go
    //     go run ./dump/_examples/map.go
    func main() {
        dump.P(
            map[string]interface{}{
                "key0": 123,
                "key1": "value1",
                "key2": []int{1, 2, 3},
                "key3": map[string]string{
                    "k0": "v0",
                    "k1": "v1",
                },
            },
        )
    }
    

    输出效果:

    image

    打印 struct

    打印 struct 数据,指针类型会自动打印底层真实数据

    package main
    
    import (
        "fmt"
    
        "github.com/gookit/color"
        "github.com/gookit/goutil/dump"
    )
    
    // rum demo:
    //     go run ./struct.go
    //     go run ./dump/_examples/struct.go
    func main() {
        s1 := &struct {
            cannotExport map[string]interface{}
        }{
            cannotExport: map[string]interface{}{
                "key1": 12,
                "key2": "abcd123",
            },
        }
    
        s2 := struct {
            ab string
            Cd int
        }{
            "ab", 23,
        }
    
        color.Infoln("- Use fmt.Println:")
        fmt.Println(s1, s2)
    
        color.Infoln("\n- Use dump.Println:")
        dump.P(
            s1,
            s2,
        )
    }
    

    输出效果:

    image

    自定义 dumper

    支持自定义 dumper 一些选项。如 缩进,色彩主题等

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2518 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:41 · PVG 22:41 · LAX 07:41 · JFK 10:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.