golang,四行实现一个 init 管理器,支持依赖

2015-10-22 19:49:08 +08:00
 zhujinliang
```
func initFunc(fn func(), depends ...int) int {
fn()
return 0
}
```

使用方法

```
var bInited = initFunc(func() {
fmt.Println("b")
}, aInited)

var cInited = initFunc(func() {
fmt.Println("c")
}, aInited, bInited)

var aInited = initFunc(func() {
fmt.Println("a")
})
```
会依次输出 a b c 然后执行 main 函数
3043 次点击
所在节点    程序员
3 条回复
zealot0630
2015-10-22 20:25:44 +08:00
耦合太严重了 不如 RAII
reus
2015-10-23 09:51:11 +08:00
@zealot0630 这是用来初始化全局变量的, RAII 和这个有什么关系?
zhujinliang
2015-10-23 11:19:10 +08:00
昨晚睡觉前又想了想

这个是利用了 golang 在编译时的依赖分析,本意是确定变量初始化顺序,但借此可以做一些其它的事
而变量初始化会在 init 函数之前
golang 提供 init 函数供库进行初始化,所以这里可能造成一个问题,你自己的初始化行为早于库的初始化,然后如果你的初始化中使用了库的某些功能,可能产生意外

自己可控的小项目可以用用

突发奇想,琢磨出这么个东西,觉得挺有意思,分享一下

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

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

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

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

© 2021 V2EX