项目作者: Justice-love

项目描述 :
golang aspect tool
高级语言: Go
项目地址: git://github.com/Justice-love/go-aspect.git
创建时间: 2021-05-09T13:34:39Z
项目社区:https://github.com/Justice-love/go-aspect

开源协议:Apache License 2.0

下载


简介

go-aspect是一个为golang提供切面编程可能性的工具,可以使用该工具,替换原有的go build来进行编译,将预先配置好的切面编织到目标代码中

效果图

效果图
效果图

安装方式

源码安装

  1. 下载源码到本地
  2. 切换到源码目录,运行 make install

使用简介

  1. 目前仅支持mod模式的工程
  2. 编织是基于目标代码下以及依赖包中的aspect.point文件进行,文件样例如下:
    ```bigquery

import “context”
import “fmt”
import “time”

point after(test.*X.Inject(c Context)) {
fmt.Println(“456”)
fmt.Println(“789”)
}

point before(test.Do(c Context)) {
{{c}} = context.WithValue({{c}}, “date”, time.Now())
}

  1. 文件分成两部分,
  2. 1. 添加import依赖
  3. 2. 对应的point切入点信息,下文是对其的解释
  4. ```bigquery
  5. //固定值point 织入方式 对应的函数 方法参数
  6. point before(test.Do(c Context)) {
  7. // 织入的代码
  8. {{c}} = context.WithValue({{c}}, "date", time.Now())
  9. }
  1. 织入方式:目前支持 before,after, around三种方式
  2. 对应函数:包名.[方法的接收者].函数名,方法接收者如果没有可以不填
    • 如果织入的代码中使用到了接收者,接收者的参数为去掉前缀的变量,如test.X.Inject中,使用X,并且需要使用{{X}}占位符表明接收者
  3. 方法参数:需要按照代织入的方法参数顺序进行编写,现支持的参数类型,struct(使用对应的类型,不需要带前缀),map,slice,array,func,interface,chan(channel)。
    • point after(test.*X.Inject(c Context, m map, s slice, i interface, f func)) {
    • 如果织入的代码中有使用到对应的参数,请使用{{c}}这样的占位符表明

编译

  1. xgc build:编译代码,和go build一样,直接执行编译后的文件即可
  2. xgc debug:生成织入后的代码,用以问题排查,代码存放在$USER_HOME/.xgc下