zoukankan      html  css  js  c++  java
  • goloader

    github地址:https://github.com/dearplain/goloader

    这里有以前的一些思路:http://www.cnblogs.com/dearplain/p/8145985.html,不过改了好多,具体还是要看代码。

    这个动态加载库是很有意思的项目,它直接重用了golang编译器的输出,不需要自己写编译器,就能支持所有golang的语言特征,免费使用编译器的优化。

    因为这个库只进行符号重定位,和提供runtime信息,所有这些逻辑是很少改动的,这样使得这个库兼容能力特别强,比如golang出新版本时候,只需要做很少的改动或者不改动,就能支持新版本。

    同时它也重用了不少go的内部库,特别是读取object文件的库,这些重用使得它变得轻量和便于维护。

     

    它对比plugin的优势,一是它是可以卸载加载的代码,二是它复用了runtime,不像plugin那么大,三是它同时支持windows、macos、linux。

    它也是唯一一个能动态加载卸载原生golang的库。

    另外,它加载的代码是可以调试的,而且支持pprof,就是说你可以在pprof工具里面看到加载的代码!

    目前goloader支持>=1.8的go版本,支持x86/x64、arm32指令集,支持windows、linux、macos。

     

    整个项目花了笔者不少时间,不过结果看起来还算满意,它的小巧和可卸载性、和golang一样的高性能、可调试性、可以pprof,使得它有自己的优点。

  • 相关阅读:
    nginx命令
    linux 命令
    js导出excel页面数据
    Linux上使用shell脚本查看内存情况(超实用)
    Gson解析json繁杂数据
    纯js制作遮罩层对话框
    简易树形菜单(可伸缩)
    一句实现jquery导航栏
    沁园春-雪
    python day3 int,str,list类型补充
  • 原文地址:https://www.cnblogs.com/dearplain/p/8543804.html
Copyright © 2011-2022 走看看