runtime包中有乙個函式func caller(skip int) (pc uintptr, file string, line int, ok bool)
,可以用來獲得在當前執行的goroutine棧上的函式呼叫資訊(go檔名和行號)。
引數skip表示要回溯的棧幀,例如:
main() // skip = 3
|- foo() // skip = 2
|- bar() // skip = 1
| - runtime.caller() // skip = 0
下面的**列印出完整的呼叫棧資訊:
package main
import (
"fmt"
"runtime"
)func main()
func foo()
func bar()
func getcallers() string
callers = callers + fmt.sprintf("%v:%v\n", file, line)
} return callers
}
輸出:
/mygo/src/main.go:20
/mygo/src/main.go:15
/mygo/src/main.go:12
/mygo/src/main.go:9
/usr/local/cellar/go/1.11/libexec/src/runtime/proc.go:201
/usr/local/cellar/go/1.11/libexec/src/runtime/asm_amd64.s:1333
列印程式HELLOWORLD
includehdc getprinterdc void int winapi winmain hinstance hinstance,hinstance hprevinstance,lpstr lpszcmdline,int icmdshow di.cbsize sizeof docinfo di...
go程式優化
1 記憶體優化 d 長呼叫棧避免申請較多的臨時物件 goroutine的呼叫棧預設大小是4k 1.7修改為2k 採用連續棧機制,當棧空間不夠時,go runtime會自動擴容 當棧空間不夠時,按2倍增加,原有棧的變數會直接copy到新的棧空間,變數指標指向新的空間位址 退棧會釋放棧空間的占用,gc時...
go基礎程式
package main 程式所屬包,必須位於 第一行 import 匯入依賴包 const 定義常量 var 全域性變數的宣告和賦值 type int 一般型別宣告 type struct 結構宣告 type inte ce 宣告介面 func 函式定義 func main package是最基本...