Heim > Backend-Entwicklung > Golang > Beispiele zur Erläuterung der Verwendung von go:linkname

Beispiele zur Erläuterung der Verwendung von go:linkname

藏色散人
Freigeben: 2021-12-17 14:32:56
nach vorne
2230 Leute haben es durchsucht

Dieser Artikel wird in der golangTutorial-Kolumne vorgestellt, um die Verwendung von go:linkname vorzustellen. Ich hoffe, dass er Freunden, die ihn benötigen, hilfreich sein wird!

Verwendung von go:linkname

Im Quellcode der Go-Sprache finden Sie viele Codes, die nur Funktionssignaturen, aber keinen Funktionskörper haben, wie zum Beispiel:

// src/os/proc.go 68行
func runtime_beforeExit() // implemented in runtime
Nach dem Login kopieren

Hier sehen wir nur Die Funktionssignatur, aber nicht den Funktionskörper. Ich konnte den Funktionskörper nicht sehen, also habe ich global gesucht und festgestellt, dass sein Funktionskörper in src/runtime/proc.go definiert ist. Er verbindet die Funktionssignatur und die Funktion body durch go:linkname. Können wir das also im Code implementieren? Da dies in Bibliotheksfunktionen verwendet werden kann, kann es dann auch in unserer eigenen Codestruktur verwendet werden? Das Folgende ist eine experimentelle Methode, um eine solche Verwendung Schritt für Schritt zu implementieren.

Projektverzeichnis erstellen.

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

$mkdir demo && cd demo
Nach dem Login kopieren

Führen Sie den Code aus

$go mod init demo
Nach dem Login kopieren

Kompilieren und ausführen

$mkdir hello
$mkdir link
Nach dem Login kopieren
Fügen Sie die Assembly-Dateimarkierung von aa.s im Hallo-Ordner hinzu, und Sie können kompilieren und ausführen

$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!")
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonBeispiele zur Erläuterung der Verwendung von go:linkname. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage