您好,登錄后才能下訂單哦!
這篇文章主要介紹“在Go中怎么轉(zhuǎn)儲(chǔ)GOSSAFUNC圖”,在日常操作中,相信很多人在在Go中怎么轉(zhuǎn)儲(chǔ)GOSSAFUNC圖問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”在Go中怎么轉(zhuǎn)儲(chǔ)GOSSAFUNC圖”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
Go 編譯器的 SSA 后端包含一種工具,可以生成編譯階段的 HTML 調(diào)試輸出。這篇文章介紹了如何為函數(shù)和方法打印 SSA 輸出。
讓我們從一個(gè)包含函數(shù)、值方法和指針方法的示例程序開始:
package main import ( "fmt") type Numbers struct { vals []int} func (n *Numbers) Add(v int) { n.vals = append(n.vals, v)} func (n Numbers) Average() float64 { sum := 0.0 for _, num := range n.vals { sum += float64(num) } return sum / float64(len(n.vals))} func main() { var numbers Numbers numbers.Add(200) numbers.Add(43) numbers.Add(-6) fmt.Println(numbers.Average())}
通過 GOSSAFUNC
環(huán)境變量控制 SSA 調(diào)試輸出。此變量含有要轉(zhuǎn)儲(chǔ)的函數(shù)的名稱。這不是函數(shù)的完全限定名。對于上面的 func main
,函數(shù)名稱為 main
而不是 main.main
。
% env GOSSAFUNC=main go buildruntimedumped SSA to ../../go/src/runtime/ssa.htmltdumped SSA to ./ssa.html
在這個(gè)例子中,GOSSAFUNC=main
同時(shí)匹配了 main.main
和一個(gè)名為 runtime.main
的函數(shù)。[1]這有點(diǎn)不走運(yùn),但是實(shí)際上可能沒什么大不了的,因?yàn)槿绻阋獙Υa進(jìn)行性能調(diào)整,它就不會(huì)出現(xiàn)在 func main
中的巨大的意大利面塊中。
你的代碼更有可能在方法中,你可能已經(jīng)看到這篇文章,并尋找能夠轉(zhuǎn)儲(chǔ)方法的 SSA 輸出。
要為指針方法 func (n *Numbers) Add
打印 SSA 調(diào)試,等效函數(shù)名為 (*Numbers).Add
:[2]
% env "GOSSAFUNC=(*Numbers).Add" go buildtdumped SSA to ./ssa.html
要為值方法 func (n Numbers) Average
打印 SSA 調(diào)試,等效函數(shù)名為 (*Numbers).Average
,即使這是一個(gè)值方法:
% env "GOSSAFUNC=(*Numbers).Average" go buildtdumped SSA to ./ssa.html
如果你沒有從源碼構(gòu)建 Go,那么 runtime
軟件包的路徑可能是只讀的,并且可能會(huì)收到錯(cuò)誤消息。請不要使用 sudo
來解決此問題。
請注意 shell 引用 。
到此,關(guān)于“在Go中怎么轉(zhuǎn)儲(chǔ)GOSSAFUNC圖”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。