golang aspect 切面

2021-06-03 14:19:48 +08:00
 justicelove

自己写了一个 golang aspect 面向切面的项目,
地址是这里 https://github.com/Justice-love/go-aspect , 求 star.

实现的效果如下图:

3253 次点击
所在节点    Go 编程语言
16 条回复
dcalsky
2021-06-03 14:21:56 +08:00
虽然简单,但是依然闻到了 spring 的恶臭。
qfdk
2021-06-03 14:26:48 +08:00
想法不错啊,回头看看,但是 这样不又是回到 spring 了么 ?
justicelove
2021-06-03 14:33:33 +08:00
@qfdk #2 spring 的代表是 IOC 依赖注入, 切面是 spring 之外也独立存在的
qfdk
2021-06-03 14:36:29 +08:00
@justicelove #3 记得这一套 打印日志特别好用。 已经远离很久了
lostSoul
2021-06-03 14:55:06 +08:00
@dcalsky 为什么是恶臭
FreeEx
2021-06-03 15:58:20 +08:00
@lostSoul 因为在有些人眼里 Java 就是原罪。
aptupdate
2021-06-03 16:24:51 +08:00
不懂 go,这是要 @inject 八股文吗?
generic
2021-06-03 16:32:50 +08:00
一边 if err!=nil 一边玩这种魔法吗?风格上完全两个极端啊...
wdlth
2021-06-03 22:27:59 +08:00
这个是参考 aspectj 那种吧,编译期织入的。
justicelove
2021-06-04 09:32:02 +08:00
@wdlth #9 是的
xx6412223
2021-06-04 10:00:04 +08:00
@justicelove 是在 编译前对文件进行插入文本吧。怎么是编译器织入?
justicelove
2021-06-04 10:38:23 +08:00
@xx6412223 #11 没有说是编译器织入, 只是需要使用其他的指令来代替 go build 进行编译
qianxiaoxiao
2021-06-07 11:58:30 +08:00
spring 的恶趣味
fumeboy
2021-07-10 17:21:00 +08:00
最近也在思考怎么在 go 实现 AOP 。我的倾向是 我编写业务代码,用 gen 工具生成增强后的函数,函数签名一致。

比如
```go
// +build dev
func proc1() (err error) {
a, err := proc2()
b, err := proc3()
if a + b == 3 {
metrcisAt3()
}
return
}
```

增强为

```go
// +build !dev
func proc1() (err error) {
logAtStart()
a, err := proc2()
if err != nil{
logAtErr()
return err
}

b, err := proc3()
if err != nil{
logAtErr()
return err
}
if a + b == 3 {
metrcisAt3()
}
return
}
```
fumeboy
2021-07-10 17:30:40 +08:00
@fumeboy 使用 build tag 做隔离
justicelove
2021-07-12 10:06:04 +08:00
@fumeboy #14 使用这种 tag 做隔离,好处是直观可控,坏处也就是对开发人员的要求比较高

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/781125

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX