Golang中如何实现Flask的@before_first_request?

2 投票
1 回答
1015 浏览
提问于 2025-04-18 18:29

我们正在把一个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
    }
}

撰写回答