`gookit/goutil/dump` - 是一个golang数据打印工具包,可以打印出漂亮易读的go slice, map, struct数据。
**主要功能:**
* 使用简单,直接调用 `dump.P(vars...)` 即可
* 支持所有的基础数据类型
* 支持slice, map, struct数据结构
* 支持传入打印多个变量
* 默认输出调用位置,方便使用
* 支持自定义部分能力,如 缩进,色彩主题等
**效果预览:**
![image.png](https://gitee.com/gookit/goutil/raw/master/dump/_examples/struct.png)
> * Gitee: [https://gitee.com/gookit/goutil](https://gitee.com/gookit/goutil)
* Github: [https://github.com/gookit/goutil/](https://github.com/gookit/goutil)
* GoDoc: [https://pkg.go.dev/github.com/gookit/goutil/dump](https://pkg.go.dev/github.com/gookit/goutil/dump)
## 打印基础类型
```go
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](https://gitee.com/gookit/goutil/raw/master/dump/_examples/basic_types.png)
## 打印slice
打印 array, slice 都会一行一个元素输出,同时会在最后输出长度。
```go
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](https://gitee.com/gookit/goutil/raw/master/dump/_examples/slice.png)
## 打印map
打印map数据结构,会一行一个元素输出,同时会在最后输出map长度。
```go
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](https://gitee.com/gookit/goutil/raw/master/dump/_examples/map.png)
## 打印struct
打印struct数据,指针类型会自动打印底层真实数据
```go
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](https://gitee.com/gookit/goutil/raw/master/dump/_examples/struct.png)
## 自定义dumper
支持自定义dumper一些选项。如 缩进,色彩主题等
```go
// Options for dump vars
type Options struct {
// Output the output writer
Output io.Writer
// NoType dont show data type TODO
NoType bool
// NoColor don't with color
NoColor bool
// IndentLen width. default is 2
IndentLen int
// IndentChar default is one space
IndentChar byte
// MaxDepth for nested print
MaxDepth int
// ShowFlag for display caller position
ShowFlag int
// MoreLenNL array/slice elements length > MoreLenNL, will wrap new line
// MoreLenNL int
// CallerSkip skip for call runtime.Caller()
CallerSkip int
// ColorTheme for print result.
ColorTheme Theme
}
```
## Git Repo
* Gitee: [https://gitee.com/gookit/goutil](https://gitee.com/gookit/goutil)
* Github: [https://github.com/gookit/goutil](https://github.com/gookit/goutil)
* GoDoc: [https://pkg.go.dev/github.com/gookit/goutil/dump](https://pkg.go.dev/github.com/gookit/goutil/dump)
有疑问加站长微信联系(非本文作者))