濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > go語(yǔ)言中l(wèi)inkname的用法

go語(yǔ)言中l(wèi)inkname的用法

熱門標(biāo)簽:浙江高速公路地圖標(biāo)注 學(xué)海導(dǎo)航地圖標(biāo)注 江西轉(zhuǎn)化率高的羿智云外呼系統(tǒng) 廣州呼叫中心外呼系統(tǒng) 西部云谷一期地圖標(biāo)注 中國(guó)地圖標(biāo)注省會(huì)高清 南通如皋申請(qǐng)開通400電話 高德地圖標(biāo)注口訣 地圖標(biāo)注的汽車標(biāo)

在go語(yǔ)言的源碼中,會(huì)發(fā)現(xiàn)很多,代碼只有函數(shù)簽名,卻看不到函數(shù)體,如:

// src/os/proc.go 68行
func runtime_beforeExit() // implemented in runtime

此處我們只看到函數(shù)簽名,卻看不到函數(shù)體,全局搜了一把,發(fā)現(xiàn)它的函數(shù)體卻定義在src/runtime/proc.go

// os_beforeExit is called from os.Exit(0).
//go:linkname os_beforeExit os.runtime_beforeExit
func os_beforeExit() {
  if raceenabled {
    racefini()
  }
}

它是通過go:linkname把函數(shù)簽名和函數(shù)體連接在一起的。那么我們?cè)诖a中,可以這樣實(shí)現(xiàn)么?既然庫(kù)函數(shù)中,可以這么用,那我們自己的代碼結(jié)構(gòu)中是不也可以這么用?以下通過實(shí)驗(yàn)的方式,一步一步的實(shí)現(xiàn)這樣的用法

創(chuàng)建項(xiàng)目目錄

$mkdir demo cd demo

go mod初始化項(xiàng)目目錄

$go mod init demo

創(chuàng)建函數(shù)簽名pkg和函數(shù)體pkg

$mkdir hello
$mkdir link

編寫測(cè)試代碼

$cd hello
// 函數(shù)簽名
$vim hello.go
package hello
import (
  _ "demo/link"
)
func Hello()
// 函數(shù)體
$vim link.go
package link
import _ "unsafe"
//go:linkname helloWorld demo/hello.Hello
func helloWorld() {
  println("hello world!")
}

執(zhí)行代碼

$cd demo
vim demo.go
package main
import (
  "demo/hello"
)
func main() {
  hello.Hello()
}

編譯運(yùn)行

go run demo.go
# demo/hello
hello/hello.go:7:6: missing function body

在hello文件夾下添加aa.s的匯編文件標(biāo)示,便可以通過編譯執(zhí)行

$cd hello  touch aa.s
$go run demo.go
hello world!

總結(jié)

以上所述是小編給大家介紹的go語(yǔ)言中l(wèi)inkname的用法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

您可能感興趣的文章:
  • nodejs提示:cross-device link not permitted, rename錯(cuò)誤的解決方法
  • Node.js調(diào)用fs.renameSync報(bào)錯(cuò)(Error: EXDEV, cross-device link not permitted)

標(biāo)簽:德宏 許昌 東營(yíng) 曲靖 常州 吐魯番 貴州 保定

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《go語(yǔ)言中l(wèi)inkname的用法》,本文關(guān)鍵詞  語(yǔ),言中,linkname,的,用法,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《go語(yǔ)言中l(wèi)inkname的用法》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于go語(yǔ)言中l(wèi)inkname的用法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    金秀| 新邵县| 黄骅市| 兴文县| 祁门县| 轮台县| 醴陵市| 乐平市| 赤壁市| 梅州市| 西乌| 林口县| 师宗县| 理塘县| 梨树县| 安化县| 岳池县| 凤阳县| 天柱县| 如东县| 增城市| 合水县| 财经| 灌阳县| 阿坝| 郁南县| 宜阳县| 岳普湖县| 高雄市| 平遥县| 镇远县| 宣化县| 郧西县| 洛隆县| 衡山县| 玉树县| 洮南市| 武宁县| 沈阳市| 遂平县| 平凉市|