首页 > 其他分享 >Go plugin

Go plugin

时间:2023-12-02 09:56:12浏览次数:25  
标签:http err plugin go func Go main

创建plugin_1.go&编译

package main

import "fmt"

func Greet(name string) {
   fmt.Println("Hello", name)
}
go build -buildmode=plugin -o xxxx.so plugin_1.go

加载和使用这个plugin:

package main

import (
   "plugin"
   "log"
)

func main() {
   p, err := plugin.Open("xxxx.so")
   if err != nil {
       log.Fatal(err)
  }
   greet, err := p.Lookup("Greet")
   if err != nil {
       log.Fatal(err)
  }
   greet.(func(string))("Go")
}

高级用法

首先,我们创建一个路由处理器作为插件:

// plugin_code.go
package main

import "net/http"

func LoadRoute(w http.ResponseWriter, r *http.Request) {
   w.Write([]byte("俺是plugin路由"))
}

var Route http.HandlerFunc = LoadRoute

编译这段代码为插件:

go build -buildmode=plugin -o new_route.so plugin_code.go

然后在Web服务器中动态加载这个插件:

// main.go
package main

import (
   "net/http"
   "plugin"
)

func main() {
   // 加载插件
   p, err := plugin.Open("new_route.so")
   if err != nil {
       panic(err)
  }

   // 查找插件中的Route变量
   route, err := p.Lookup("Route")
   if err != nil {
       panic(err)
  }

   // 断言Route的类型并使用它作为HTTP处理器
   http.HandleFunc("/new-route", route.(func(http.ResponseWriter, *http.Request)))

   // 启动HTTP服务器
   http.ListenAndServe(":8080", nil)
}

标签:http,err,plugin,go,func,Go,main
From: https://www.cnblogs.com/qcy-blog/p/17871273.html

相关文章

  • 深入浅出 PLT/GOT Hook与原理实践
    动态链接计算机程序链接时分两种形式:静态链接和动态链接。静态链接在链接时将所有目标文件中的代码、数据等Section都组装到可执行文件当中,并将代码中使用到的外部符号(函数、变量)都进行了重定位。因此在执行时不需要依赖其他外部模块即可执行,并且可以获得更快的启动时间和执行速......
  • SRE Google运维解密 第一章
    译者序SRE是一群天生的怀疑论者,我们怀疑一切宣传起来"高大上"的技术,以及任何"神奇"的产品一一我们只想看具体的设计架构、实现细节,以及真实的监控图表。SRE在保障系统可靠性方面并没有什么万能药,有的只是这种极强的务实态度(pragmatic)。这种务实的态度决定了SRE会认真对......
  • Google Colab 现已支持直接使用 transformers 库
    GoogleColab,全称Colaboratory,是GoogleResearch团队开发的一款产品。在Colab中,任何人都可以通过浏览器编写和执行任意Python代码。它尤其适合机器学习、数据分析和教育目的。从技术上来说,Colab是一种托管式Jupyter笔记本服务。用户无需设置,就可以直接使用,同时还能获得......
  • go三种超时退出方法
    Golang实现超时退出有哪三种方式,你知道吗?原创 磊丰 Go语言圈 2023-11-2108:30 发表于美国收录于合集#学Go语言哪些事儿241个MySQL大牛带你全面剖析与系统梳理数据库(mysql等)知识分享,总结数据库技巧和方法,提升你的技术技能。45篇原创内容公众号......
  • go读写锁
    go读写锁互斥锁每次只让一g通过,去读写数据。但是读数据操作,并发其实没有问题。所以诞生了读写锁。读协程可以并发,一起读。但是写协程还是要走互斥锁,只能一个个通过。先加了读锁先加了读锁。那么写的协程,就需要去休眠队列中等待。一直到读锁都释放。先加了写锁这个时候,......
  • 记一次vscode 打开go项目的处理方式
    问题:需要用vscode打开没有用go.mod管理的项目打包项目为linux执行的二进制文件vscode全局settings.json配置{"go.formatTool":"gofmt","go.gopath":"D:\\GoPath;","go.goroot":"D:\\GO","go.lintTool&......
  • jwt在go中的应用
    官网JWT什么是JWT在现代的Web应用开发中,目前已经有大半部分的应用都是使用的jwt的方式来做登录鉴权功能,那么什么是jwt呢?JSONWebToken(JWT)是一个开放标准RFC519,它定义了一种紧凑且自包含的方式,用于作为JSON对象在各方面之间安全地传输信息;JWT是一个数......
  • Django补4
    过滤器写一个过滤器---》一堆内容---》经过过滤器后---》把关键词屏蔽#自定义过滤器{{变量|过滤器名字}}编写步骤1注册app2在某个app下:创建templatetags模块(模块名只能是templatetags)3在包下写一个py文件,随便命名4在py文件中:写入fromdjangoimporttemplateregister=t......
  • GORM学习
    Day1:GORM入门1.环境的安装在项目文件的terminal中输入下面两条命令进行gorm安装gogetgorm.io/driver/mysqlgogetgorm.io/gorm2.安装好之后使用以下代码进行检测,其中的地址拼接是重点"%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local&timeout=%s",us......
  • Google Play 结算系统
    技术GooglePlay。供用户下载应用及其他数字商品的在线商店。GooglePlay管理中心。提供界面,供您将应用发布到GooglePlay的平台。GooglePlay管理中心还会显示您的应用详情,包括您通过GooglePlay销售的任何商品或内容。GoogleCloud控制台。用于管理后端API(例如Google......