go语言中linkname的用法
作者:暮雨 发布时间:2024-02-07 10:48:39
标签:go,linkname
在go语言的源码中,会发现很多,代码只有函数签名,却看不到函数体,如:
// src/os/proc.go 68行
func runtime_beforeExit() // implemented in runtime
此处我们只看到函数签名,却看不到函数体,全局搜了一把,发现它的函数体却定义在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把函数签名和函数体连接在一起的。那么我们在代码中,可以这样实现么?既然库函数中,可以这么用,那我们自己的代码结构中是不也可以这么用?以下通过实验的方式,一步一步的实现这样的用法
创建项目目录
$mkdir demo && cd demo
go mod初始化项目目录
$go mod init demo
创建函数签名pkg和函数体pkg
$mkdir hello
$mkdir link
编写测试代码
$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!")
}
执行代码
$cd demo
vim demo.go
package main
import (
"demo/hello"
)
func main() {
hello.Hello()
}
编译运行
go run demo.go
# demo/hello
hello/hello.go:7:6: missing function body
在hello文件夹下添加aa.s的汇编文件标示,便可以通过编译执行
$cd hello && touch aa.s
$go run demo.go
hello world!
总结
以上所述是小编给大家介绍的go语言中linkname的用法,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
来源:https://studygolang.com/articles/22593


猜你喜欢
- 在python中,提到如何计算多维数组和矩阵,那一定会想到numpy。numpy定义了矩阵和数组,为它们提供了相关的运算。size中文解释为
- docker安装mysqldocker search mysql 搜索docker pull mysql:5.6
- Python 直接连接mongodb数据库进行查询操作1、安装所需模块使用到的是pymongo模块,安装方法:pip instal
- 前言我们在处理数据库的问题的时候,有时在数据库端看不到异常的等待,但是应用却报连接异常。这种情况,有可能是在压力还没有传递到数据库,在网络这
- 有时候要通过asp代码在数据库中创建表和列,下面的就是这些操作的函数。1.检测表是否存在tbName 检测的表的名称dbTp 数据库的类型1
- 网站搬家的时候碰到的这个问题,因为数据一直是使用PhpMyAdmin工具来进行备份和恢复的,但是随着网站的数据越来越多,所以数据库也是越来越
- python-查找特定名称文件并按序号、文件名分行打印输出第1天第2题1.遍历”Day1-homework”目录下文件;2.找到文件名包含“
- 一、元素偏移量 offset 系列offset 翻译过来就是偏移量, 我们使用 offset 系列相关属性可以动态的得到该元素的位置(偏移)
- 在web应用中,常常会遇见点击某个链接会弹出一个新的窗口,或者是相互关联的web应用 ,这样要去操作新窗口中的元素,这时就需要主机切换到新窗
- 本文实例讲述了laravel框架中路由设置,路由参数和路由命名。分享给大家供大家参考,具体如下:laravel中必须先配置路由,才能使用。不
- 代码如下:<%@ Language=VBScript %> <% Dim 
- 本文实例讲述了Go语言图片处理和生成缩略图的方法。分享给大家供大家参考。具体实现方法如下:package mainimport ( 
- 在web.config文件中添加<connectionStrings><add name="SQLConnect
- hello,大家好,我是Dream。最近有小伙伴私信我,说让我出一篇海龟画图,这其实我也不太能弄得明白,那在这里我和大家一块梳理一下!记得给
- QQ影音至9月发布之后一直口碑很好,视觉界面和交互设计也颇受好评,这是设计师们努力的结果,也是众多用户反馈的功劳。我们希望可以提供更多价值回
- ASP中查询数据库记录写入XML文件示例,把下面代码保存为Asp_XML.asp运行即可: &
- 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性。先定义cl
- 因为神奇的中文有时也是会遇到国外同学都不知道原因导致一些神奇滴问题,所以要用更神奇的英文来解决问题。Mac OS的一些:华文细黑:STHei
- 这篇文章主要介绍了python3 pathlib库Path类方法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习
- Timeloop是一个库,可用于运行多周期任务。这是一个简单的库,使用decorator模式在线程中运行标记函数。首先安装timeloop库