spew - 更直观地打印变量

简介: spew - 更直观地打印变量

本文介绍了go-spew,一个用于在Go语言中提供更直观变量查看的库,包括基础类型、结构体、切片的打印示例,以及如何在Web应用中使用它进行调试。

除了 spew,我们当然也可以直接选择通过 IDE 的 debug 功能来调试。

spew

go-spew 是一个帮助开发者更直观地打印变量的工具.

通过 fmt.Print 系列方法打印变量或者结构体、数组的时候,我们看到的信息其实是很不直观的,而借助 go-spew 可以非常直观地看到打印变量的信息,比如类型、结构体字段等。

安装

go get -u github.com/davecgh/go-spew/spew

示例

  1. 打印基础类型
a := 1
fmt.Println(a)
spew.Dump(a)

输出:

1
(int) 1   // 比 fmt 的输出多了类型信息
  1. 打印结构体
p := Person{
    Name: "spew",
    age:  23,
}
fmt.Println(p)
spew.Dump(p)

输出:

{spew 23}
(main.Person) {  // 比 fmt 的输出多了类型、字段名、字段类型、字符串类型的长度等信息,另外还有缩进
 Name: (string) (len=4) "spew",
 age: (int) 23
}
  1. 打印切片
arr := [...]int{1, 2, 3}
fmt.Println(arr)
spew.Dump(arr)

输出:

[1 2 3]
([3]int) (len=3 cap=3) {  // 比 fmt 的输出多了长度、类型、容量等信息,而且输出的格式是带缩进的
 (int) 1,
 (int) 2,
 (int) 3
}
  1. 打印到 Writer

someWriter 是任何实现了 io.Writer 的对象。

spew.Fdump(someWriter, myVar1, myVar2, ...)
  1. 获取格式化的字符串

下面这个 Sdump 会返回一个字符串而不是直接输出。

str := spew.Sdump(myVar1, myVar2, ...)

调试 Web 应用

使用 Sdump 来获取结构体的所有详细信息。

func handler(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "text/html")
    fmt.Fprintf(w, "Hi there, %s!", r.URL.Path[1:])
    fmt.Fprintf(w, "<!--\n" + html.EscapeString(spew.Sdump(w)) + "\n-->")
}


目录
相关文章
|
5月前
|
IDE NoSQL JavaScript
在调试窗口中查看变量的值:提升编程效率的关键技巧
在调试窗口中查看变量的值:提升编程效率的关键技巧
43 1
|
5月前
|
Java Python
循环程序举例
循环程序举例
40 1
|
5月前
|
编译器 开发工具 C语言
单一程序:打印 Hello World
【5月更文挑战第14天】单一程序:打印 Hello World。
25 1
|
5月前
|
存储 Shell C++
零基础学会python编程——输入 / 输出函数与变量
零基础学会python编程——输入 / 输出函数与变量
137 0
|
11月前
|
数据可视化 数据挖掘 Python
python绘制箱型图+打印异常值
python绘制箱型图+打印异常值
99 0
#PY小贴士# for 循环定义的变量,循环外可以用吗?
我们知道,在 python 中要获取一个变量的值,必须是先给它赋值过,不然就是未定义。那么这个 i,代码中没有显式的赋值,在循环体之外还可以用吗?
|
C语言
打印100到200之间的单数。打印100到200之间的双数(函数方法)
打印100到200之间的单数。打印100到200之间的双数(函数方法)
104 0
打印100到200之间的单数。打印100到200之间的双数(函数方法)
比较(用函数方法)打印100到200之间的单数,素数,并且请教各位读者,如何区别的不同
比较(用函数方法)打印100到200之间的单数,素数,并且请教各位读者,如何区别的不同
100 0
比较(用函数方法)打印100到200之间的单数,素数,并且请教各位读者,如何区别的不同
创造函数,并用该函数打印1000-2000年之间的闰年
创造函数,并用该函数打印1000-2000年之间的闰年
54 0
创造函数,并用该函数打印1000-2000年之间的闰年