Golang中如何实现Flask的@before_first_request?
我们正在把一个Flask应用程序换成Golang,主要是为了提高性能。在Flask中,有一个叫“before_first_request”的东西,它表示在应用启动时要运行的一个函数。这个函数只会运行一次,且仅运行一次。我查阅了文档,但找不到Golang中有没有类似的功能……它存在吗?(我想这不一定要是net/http包的一部分)
我们的Flask代码:
@before_first_request
def before(*args, **kwargs):
....
return
1 个回答
4
一种方法是把你的函数逻辑放在模块的 func init() { ... }
方法里面。
另外,你也可以使用 sync.Once。
http://play.golang.org/p/SEJxEEDnxt
package main
import (
"fmt"
"sync"
)
func main() {
var once sync.Once
onceBody := func() {
fmt.Println("Only once")
}
done := make(chan bool)
for i := 0; i < 10; i++ {
go func() {
once.Do(onceBody)
done <- true
}()
}
for i := 0; i < 10; i++ {
<-done
}
}