Dalam kod sumber bahasa go, anda akan menemui banyak kod yang hanya mempunyai tandatangan fungsi tetapi tidak dapat melihat badan fungsi , seperti :
// src/os/proc.go 68行 func runtime_beforeExit() // implemented in runtime
Di sini kita hanya melihat tandatangan fungsi, tetapi bukan badan fungsi Selepas carian global, kami mendapati bahawa badan fungsinya ditakrifkan dalam 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() } }
Buat direktori projek
$mkdir demo && cd demo
go mod mulakan direktori projek
$go mod init demo
Buat pkg tandatangan fungsi dan pkg badan fungsi
$mkdir hello $mkdir link
Tulis kod ujian
$cd hello // 函数签名 $vim hello.go package hello import ( _ "demo/link" ) func Hello() // 函数体 $vim link.go package link import _ "unsafe" //go:linkname helloWorld demo/hello.Hello func helloWorld() { println("hello world!") }
Laksanakan kod
$cd demo vim demo.go package main import ( "demo/hello" ) func main() { hello.Hello() }
Kompilasi dan jalankan
go run demo.go # demo/hello hello/hello.go:7:6: missing function body
$cd hello && touch aa.s $go run demo.go hello world!