当前位置: 首页 > news >正文

有创意的婚纱网站模板下载专业建设网站服务公司

有创意的婚纱网站模板下载,专业建设网站服务公司,wordpress快速网店主题,网络营销方案撰写的内容与要求注#xff1a; 转载请注明出处#xff0c; 原文链接。 概述 在这篇博客中#xff0c;我将详细介绍 xgo 的实现细节。 如果你不知道#xff0c;xgo 项目位于 https://github.com/xhd2015/xgo。 它的作用很简单#xff0c;就是在每个 Go 函数的开头添加拦截器#xff0…注 转载请注明出处 原文链接。 概述 在这篇博客中我将详细介绍 xgo 的实现细节。 如果你不知道xgo 项目位于 https://github.com/xhd2015/xgo。 它的作用很简单就是在每个 Go 函数的开头添加拦截器从而引入了所谓的 Trap 概念然后在此基础上引入了其他功能比如 Mock、Patch 和 Trace。 什么是 Trap Trap 是插入到函数体开头的一段代码。以一个名为 greet 的函数为例 func greet(s string) string {return hello s }经过xgo的处理后编译器看到的代码将变为 import runtimefunc greet(s string) (r0 string){stop, post : runtime.__xgo_trap(greet, s, r0)if stop {return}defer post()return hello s }这两者的差异可以通过下面的图表来可视化 如图所示一旦函数被调用它的控制流首先转移到 Trap然后一系列拦截器将根据其目的检查当前调用是否应该被Mock、修改、记录或停止。 这个想法很简单但也引发了一些问题 编译器如何看到插桩后的代码import runtime 是什么 这两个问题反映了 xgo 的两个基本部分编译器插桩和运行时插桩。 让我们先看看第一个问题。 编译器如何看到插桩后的代码 为了让编译器看到与其原始源代码不同的代码中间必须发生某种事情。 有趣的是go build 有一个名为-toolexec的标志 $ go help build ... -toolexec cmd argsa program to use to invoke toolchain programs like vet and asm.For example, instead of running asm, the go command will runcmd args /path/to/asm arguments for asm.The TOOLEXEC_IMPORTPATH environment variable will be set,matching go list -f {{.ImportPath}} for the package being built. ...如果你搜索 go toolexec甚至有一个示例https://go.dev/src/cmd/go/testdata/script/toolexec.txt。 简而言之-toolexec 标志允许用户拦截 go 调用的每个 compile 和 link 命令并根据需要执行某种插桩如下图所示 请注意当你在 go build 中添加 -toolexecmy_tool 标志时它不会直接调用 compile args 和 link args而是将这些调用转发给 my_tool cmd args。 因此xgo 利用这个标志来拦截 compile 命令将所有的编译转发到增强后的编译器。 然后增强后的编译器将在每个函数中插入这些Trap调用为运行时在实际调用之前捕获函数调用提供机会。 import runtime 是什么 现在编译器已经为我们添加了Trap调用我们如何知道需要进行什么样的检查 我们不能让每个包都依赖于 xgo因为它们可能并不需要它。 好在 runtime 也被插桩了将调用转发给 xgo。因为在 Go 中每个包都隐式依赖于 runtime 包。控制流程如下图所示 这实际上是一种依赖注入。这样一来用户的代码就不必显式依赖xgo。 上述代码可以在 runtime/trap_runtime/xgo_trap.go 和 runtime/trap/trap.go 中找到。 为了使Trap可扩展xgo 引入了一个名为 interceptor 的概念。它具有以下签名 type Interceptor struct {Pre func(ctx context.Context, f *core.FuncInfo, args core.Object, result core.Object) (data interface{}, err error)Post func(ctx context.Context, f *core.FuncInfo, args core.Object, result core.Object, data interface{}) error }一个 interceptor 由两个子函数组成称为 Pre 和 Post。 Pre 在函数逻辑之前调用Post 在函数逻辑之后使用 defer 语句调用。 总结 让我们总结一下我们所讨论的内容。 当你运行 xgo test ./ 时它会执行以下操作 找到 GOROOT将 GOROOT 复制到 ~/.xgo/go-instruments/GOROOT 以准备进行插桩对 ~/.xgo/go-instruments/GOROOT 进行补丁包括编译器和运行时构建插桩的编译器使用额外的标志调用 go buildgo build -toolexecexec_tool ./exec_tool 然后将所有编译命令转发给插桩的编译器一旦所有编译完成go 调用 link 生成可执行文件你就得到了一个插桩的二进制文件 优点和缺点 因此xgo 从上述机制中获得了优点和缺点。 优点 并发安全它不会替换需要修改全局地址的函数因此每个 goroutine 可以设置自己的拦截器并单独删除它们兼容性它重写源代码而不是架构指令因此与操作系统和架构无关可扩展性它提供了通用的拦截器因此它的用途不仅限于模拟你可以借鉴 GRPC 拦截器的所有用途比如已经实现的追踪、缓存、日志记录等… 缺点 用户需要安装 xgo 才能启用陷阱功能。 感谢阅读xgo的核心实现已经在上面全部介绍了。你对此有什么看法请在这里留下评论让我们一起讨论吧
http://www.pierceye.com/news/30532/

相关文章:

  • 做电商要注册网站吗沧州手机网站建设
  • 网站集约化建设行业规定jsp网站开发技术的开发
  • 一个网站如何挣钱wordpress防护屏蔽国外ip
  • 网站开发培训设计网红商城自助下单app
  • 互联网网站开发有哪些职位wordpress模板商业用
  • 用vs2012怎么做网站旅游网站开发的背景和意义
  • 网站建设免费维护内容wordpress手机模板制作
  • 高端型网站建设给我免费的视频在线观看
  • 有什么做宝宝辅食的网站吗电子商务网站设计的书
  • 松岗网站的建设网站备案为什么要关闭
  • php笑话网站源码深圳宝安商城网站建设公司
  • 广东省网站集约化建设方案软考高级职称哪个好考
  • 网站建设方案推销网站htm建设
  • 猪八戒类似网站开发成本企业263邮箱登录入口
  • 郑州诺耀科技 - 郑州高端网站建设营销推广北京哪个网站建设最好
  • angularjs 网站模板滕州网站建设制作
  • 外贸网站产品网站开发制作
  • 淘宝网站做多久深圳网站建设行业排行
  • 传统企业网站建设运营分析做响应式网站最大宽度
  • 知名高端网站建设公司百度seo软件曝光行者seo
  • 做网络写手最好进那个网站网上做实验的网站
  • 百度搜索网站优化小型企业网络设计方案报告
  • 网站底部备案号代码凡科建站怎么删除网站建设
  • 哪个网站做视频有钱挣量个网站一个域名
  • 长春专业网站建设模板没有网站怎么做百度推广
  • 怎么做dj网站给千图网等网站做设计赚钱吗
  • 网站建设前期规划方案亚马逊建站服务
  • 移动互联网 网站建设静态展示类网站
  • 网站怎么做免费站长工具seo综合查询论坛
  • 淮北哪有做淘宝网站换域名对网站的影响