go:linkname注釋講解,使用場景
讀源碼的時(shí)候我們經(jīng)常會(huì)讀著讀著 就變成了一個(gè)函數(shù)沒有實(shí)現(xiàn) 之后上面帶著//go:linkname上面的函數(shù);
為什么會(huì)有這種函數(shù)呢?首先我們看一個(gè)time包的函數(shù):
time.runtimeNano()
查看它的源碼:

//go:linkname localname [importpath.name]
使用[importpath.name]作為源代碼中聲明的localname的變量或函數(shù)。由于該指令可以破壞類型系統(tǒng)和包模塊化。因此只有引用了 unsafe 包才可以使用。
因此我們直接看: runtime.nanotime函數(shù):



到這里我們知道了,//go:linkname 它有一個(gè)很重要的作用:
就是執(zhí)行一些需要很高性能,但是為了代碼簡潔,而直接使用了其他包的執(zhí)行方法,因?yàn)檫@些方法大部分都是一些基礎(chǔ)語言中函數(shù)實(shí)現(xiàn),因此都集成到了runtime包中。
如果加入我們開發(fā)go性能遇到瓶頸,真的需要使用到匯編指令,這塊還是需要知道的,如果真的對(duì)go匯編比較熟悉的確是一個(gè)很牛X的選擇(前提是對(duì)匯編和機(jī)器指令了如指掌)。
????視頻內(nèi)容大部分就是如何在go項(xiàng)目中使用到//go:linkname,舉例子:



就上面的簡單例子就可以使用到go:linkname了,go匯編這塊后續(xù)我也準(zhǔn)備出幾期視頻講解一下,當(dāng)然是從簡單的開始講,畢竟匯編不是那么簡單的。
有什么疑問可以留言,謝謝
標(biāo)簽: