Delve 是一个 Golang 的调试工具,比 GDB 要好用很多,能支持协程的调试。使用的时候可以直接运行程序调试,也可以 attach 到一个正在运行中的程序。
安装
Delve 的安装很简单,它本身也是 go 写的。
Delve 是一个 Golang 的调试工具,比 GDB 要好用很多,能支持协程的调试。使用的时候可以直接运行程序调试,也可以 attach 到一个正在运行中的程序。
Delve 的安装很简单,它本身也是 go 写的。
Go 语言推荐测试文件和源代码文件放在一起。测试文件以 “_test.go” 结尾(这样在 go build 的时候才不会被包含)。
example/
|-- biz.go
|-- biz_test.go
普通测试用例的方法以 Test 开头,参数为 t *testing.T
sudo mkdir -p /etc/systemd/system/docker.service.d
# 写入 /etc/systemd/system/docker.service.d/proxy.conf
[Service]
Environment="HTTP_PROXY=http://bb.bb.com"
Environment="HTTPS_PROXY=http://bb.bb.com"
Environment="NO_PROXY=aa.bb.com"
然后
sudo systemctl daemon-reload
sudo systemctl restart docker
更新:大部分已经不可用
对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)
Git 常用撤销操作
git checkout <file-path>
这样就可以把文件恢复到 git 版本里的样子。
如果修改的文件已经 add 了,可以用下面的方法撤销 add。
git reset HEAD <file-name> # 撤销某个文件
git reset # 撤销所有文件
同样,另一个操作也可以达到一样的效果
Channel 的操作对应在运行时里的方法(都在 $GORROT/src/runtime/chan.go 里)
Channel 操作 | 运行时方法 |
---|---|
make(chan int, 4) | makechan(int, 4) |
make(chan int) | makechan(int, 0) |
ch <- v | chansend1(ch, &v) |
v <- ch | chanrecv1(ch, &v) |
close(ch) | closechan(ch) |
makechan 返回的是一个叫做 hchan 的结构。所以 chan 本质上是用 hchan 表示的,它的传参与赋值始终都是指针形式,每个 hchan 对象代表着一个 chan。
当运行 go generate 命令时,他会扫描当前包相关的源代码文件,找出所有包含有 //go:generate
的特殊注释,提取并执行注释后面的命令,命令为可执行程序,如同在 shell 下面执行。
需要注意的
这个注释必须在 .go 源码文件中
go trace 在 go 1.5 版本加入,会在运行中收集以下事件的所有数据
创建,启动和终止 goroutine
阻塞/非阻塞 goroutines(syscalls, channels, locks)
网络 io
Syscalls
gc
收集后不会做任何类型的聚合和抽样。
pprof 用来分析 CPU 和内存分别用在了哪里,trace 用来确定什么阻止了 goroutine 运行,goroutine 在 OS 线程上如何被调度。
pprof 是 Go 提供的一套可视化和分析性能分析数据的工具。 主要包含两部分
runtime/pprof 编译进了每个 go 程序
go tool pprof 用来分析 profile
Profiling 可以翻译成画像,类似在侦破案件的时候警察会对嫌疑人做的画像。profiling 就是对应用做的画像,描述应用使用 CPU 和内存的情况,用了多少,在哪些地方使用等等。