Go:调试 && 错误处理

一、用defer追踪函数执行

关键字 defer 推迟到函数返回之前(或任意位置执行 return 语句之后)一刻才执行某个语句或函数

当有多个defer时会像栈一样,先进后出

package main

import "fmt"

func trace(s string) string {
    fmt.Println("entering:", s)
    return s
}

func un(s string) {
    fmt.Println("leaving:", s)
}

func a() {
    defer un(trace("a"))
    fmt.Println("in a")
}

func b() {
    defer un(trace("b"))
    fmt.Println("in b")
    a()
}

func main() {
    b()
}

使用 defer 语句来记录函数的参数与返回值

package main

import (
    "io"
    "log"
)

func func1(s string) (n int, err error) {
    defer func() {
        log.Printf("func1(%q) = %d, %v", s, n, err)
    }()
    return 7, io.EOF
}

func main() {
    func1("Go")
}

/* result:
 * Output: 2011/10/04 10:46:11 func1("Go") = 7, EOF
 */

二、闭包调试

使用 runtime 或 log 包中的特殊函数,可以在需要的时候实现一个 where() 闭包函数来打印函数执行的位置:

where := func() {
    _, file, line, _ := runtime.Caller(1)
    log.Printf("%s:%d", file, line)
}
where()
...some code
where()

/**************or more simple***********************/

var where = log.Print
func func1() {
where()
... some code
where()
... some code
where()
}

三、计算函数执行时间

使用 time 包中的 Now() 和 Sub 函数,得到开始时间和结束时间

start := time.Now()
longCalculation()
end := time.Now()
delta := end.Sub(start)
fmt.Printf("longCalculation took this amount of time: %s\n", delta)

你可能感兴趣的:(GO,golang,开发语言,后端)