Rumah > pembangunan bahagian belakang > Golang > Contoh untuk menerangkan cara menggunakan go:linkname

Contoh untuk menerangkan cara menggunakan go:linkname

藏色散人
Lepaskan: 2021-12-17 14:32:56
ke hadapan
2268 orang telah melayarinya

Artikel ini diperkenalkan oleh ruangan tutorial golang untuk memperkenalkan cara menggunakan go:linkname saya harap ia dapat membantu rakan-rakan yang memerlukan.

Penggunaan go:linkname

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
Salin selepas log masuk

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()
    }
}
Salin selepas log masuk
Ia menghubungkan tandatangan fungsi dan badan fungsi melalui go:linkname. Jadi bolehkah kita melaksanakan ini dalam kod? Memandangkan ini boleh digunakan dalam fungsi perpustakaan, bolehkah ia juga digunakan dalam struktur kod kita sendiri? Berikut ialah kaedah percubaan untuk melaksanakan penggunaan sedemikian langkah demi langkah


Buat direktori projek

$mkdir demo && cd demo
Salin selepas log masuk

go mod mulakan direktori projek

$go mod init demo
Salin selepas log masuk

Buat pkg tandatangan fungsi dan pkg badan fungsi

$mkdir hello
$mkdir link
Salin selepas log masuk

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!")
}
Salin selepas log masuk

Laksanakan kod

$cd demo
vim demo.go
package main

import (
    "demo/hello"
)

func main() {
    hello.Hello()
}
Salin selepas log masuk

Kompilasi dan jalankan

go run demo.go
# demo/hello
hello/hello.go:7:6: missing function body
Salin selepas log masuk
Tambahkan tanda fail pemasangan aa.s dalam folder hello, dan anda boleh menyusun dan melaksanakan

$cd hello && touch aa.s
$go run demo.go
hello world!
Salin selepas log masuk

Atas ialah kandungan terperinci Contoh untuk menerangkan cara menggunakan go:linkname. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:segmentfault.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan