gpt4 book ai didi

go - 组织路线和助手

转载 作者:IT王子 更新时间:2023-10-29 01:43:07 25 4
gpt4 key购买 nike

我开始在 go(golang) 中构建一个 api,但我有几个问题...

所以在我的主函数或初始化函数中(因为我可能会使用 appengine),我正在考虑调用一个函数,该函数将使用 gorilla 多路复用器定义我的所有路由。我的应用程序的每一张图片(帖子、评论等...)都将有一个包含其结构/方法/功能的包。

问题:

  1. 因为我在考虑在一个函数中定义路由,我是否需要在这个文件中导入我的所有包,以便将请求发送到正确的处理程序?

  2. helper 函数呢,例如我想将响应的 content type 设置为 application/json 对于所有需要这样做的处理程序,我将如何做到这一点?

我不是在寻找框架,只是寻找一些关于如何以 golang 方式克服这些问题的指示。

最佳答案

如果您在单个函数中定义所有路由,则包含此函数的文件将需要导入实现处理程序的包。引用另一个包中的类型或函数的唯一方法是导入包。

下面是设置内容类型并将值编码为 JSON 的助手:

func JSONHandler(f func(w http.ResponseWriter, r *http.Request) interface{}) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
v := f(w, r)
if v != nil {
w.Header().Set("Content-Type", "application/json")
if err := json.NewEncoder(w).Encode(v); err != nil {
log.Println(err)
}
}
})
}

此函数的参数是一个函数,它返回一个值以将响应编码为 JSON。例如,此函数以 JSON 格式返回客户端的用户代理。

func UserAgentHandler(w http.ResponseWriter, r *http.Request) interface{} {
return struct { UserAgent string }{ req.Header.Get("User-Agent") }
}

使用以下代码向 Gorilla mux r 注册此处理程序:

r.Handle("/user-agent", JSONHandler(UserAgentHandler))

有很多方法可以改进 JSONHandler。

关于go - 组织路线和助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25797832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com