Go标准库plugin源码分析----动态库使用

本文详细介绍了Go语言的plugin库,用于动态库加载和热更新。通过分析源码,展示了plugin.Open和plugin.Lookup两个关键接口的实现,探讨了其在Linux和macOS平台上的工作原理,利用cgo封装了dlopen和dlsym函数。文中还提到了并发安全措施和plugin的限制,如仅在特定平台支持,且不提供关闭接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文公众号文章链接:https://mp.weixin.qq.com/s/2MKjUUJ6QxJieW4BGvhbxg

 

 

 

Go通常都是编译打包成一个可执行文件,好处是不需要考虑依赖库,一个可执行文件,拷贝就可以直接执行。

但还有些场景,如需要以插件形式加载,方便动态更新,热重启等情况。这些场景的需求,就带来了plugin库,动态库加载。

 

那么先看看plguin这个库的文档。文档为1.10版本

 

编译命令和普通的编译不一样,增加了参数-buildmode=plugin

 

另外plugin第一次加载时候,init函数会调用。(后面的源码分析中会分析)

注意:

1、plugin只init一次,并且不能closed。

2、目前只实现了linux平台和macos平台

 

 

文件很少,就只有两个(其实源码里有三个文件)

只提供了两个接口

Open:加载so库文件

Lookup:查找对应符号(包括func,var等)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值