在日志信息中,有时需要获取当前函数的调用信息,比如打印调用栈:

调用栈

debug.Stack() []byte

debug.Stack()函数可以获取当前 goroutine 的调用栈信息,需要import "runtime/debug"

 8
 9
10
11
12
13
14
15
16
17
18
19
20
func foo() {
    fmt.Println("--- BEGIN ---")
    fmt.Println(string(debug.Stack()))
    fmt.Println("--- END ---")
}

func boom() {
    foo()
}

func main() {
    boom()
}

Read More

govendor

go vendor 是 go 1.6 官方正式引入的包管理方式。

其基本思路是,将引用的外部包的源代码放在当前工程的vendor目录下面,go 编译时会优先从vendor目录寻找依赖关系。

Read More

由于众所不知的原因,在国内访问golang.org需要爬梯子。

所以使用go get安装某些包的时候,也要用梯子。

Read More

数组与切片

以前粗学时并没有留意 Golang 的数组,一直以为只有切片。

今天看《Go 语言实践》时才发现 Golang 也有数组。与切片的区别是定义时指定长度(例如长度为 4 的 int 型数组var array [4]int)。

数组赋值时会拷贝整个数组,所以作为参数传递时也会完整拷贝,要考虑性能合理使用,必要时可以使用指针。

以下代码便于理解数组和切片:

Read More

Author's picture

SelFree

城市永远年轻,而我们终将老去

Programer

ChengDu·China
-