當(dāng)您在分析和調(diào)試復(fù)雜的程序時(shí),無數(shù)個(gè)函數(shù)在不同的代碼文件中相互調(diào)用,如果這時(shí)候能夠準(zhǔn)確地知道哪個(gè)文件中的具體哪個(gè)函數(shù)正在執(zhí)行,對(duì)于調(diào)試是十分有幫助的。您可以使用 runtime
或 log
包中的特殊函數(shù)來實(shí)現(xiàn)這樣的功能。包 runtime
中的函數(shù) Caller()
提供了相應(yīng)的信息,因此可以在需要的時(shí)候?qū)崿F(xiàn)一個(gè) where()
閉包函數(shù)來打印函數(shù)執(zhí)行的位置:
where := func() {
_, file, line, _ := runtime.Caller(1)
log.Printf("%s:%d", file, line)
}
where()
// some code
where()
// some more code
where()
您也可以設(shè)置 log
包中的 flag 參數(shù)來實(shí)現(xiàn):
log.SetFlags(log.Llongfile)
log.Print("")
或使用一個(gè)更加簡(jiǎn)短版本的 where
函數(shù):
var where = log.Print
func func1() {
where()
... some code
where()
... some code
where()
}