gpt4 book ai didi

go - 从 Go 中的子函数关闭/返回 ResponseWriter

转载 作者:数据小太阳 更新时间:2023-10-29 03:29:43 25 4
gpt4 key购买 nike

我是 Go 和构建网络应用程序的新手。我的处理程序的一个例子是这样的:

func getAllPostsHandler(w http.ResponseWriter, r *http.Request) {
var posts []Post

dbSesstion := context.Get(r, "database").(*mgo.Session)
err := dbSesstion.DB(dbsett.Name).C(dbsett.Collection).Find(nil).All(&posts)
if err != nil {
log.Print("error: ", nil)
w.WriteHeader(http.StatusInternalServerError)
return
}
err = json.NewEncoder(w).Encode(posts)
if err != nil {
log.Print("error: ", nil)
w.WriteHeader(http.StatusInternalServerError)
return
}
w.WriteHeader(http.StatusOK)
}

我的处理程序有很多像这样的重复错误检查:

if err != nil {
log.Print("error: ", nil)
w.WriteHeader(http.StatusInternalServerError)
return
}

我想创建一个函数,检查错误,打印日志,必要时写入响应编写器,然后返回,但不仅返回处理程序,而且停止所有其他响应写入并返回处理程序本身。有可能这样做吗?我正在考虑 panic ,但有件事告诉我这不是正确的方法。

最佳答案

你不能从最内层的函数中逃脱最外层的函数,但你至少可以通过反转控制流来压缩代码

err := dbSesstion.DB(dbsett.Name).C(dbsett.Collection).Find(nil).All(&posts)
if err == nil {
err = json.NewEncoder(w).Encode(posts)
if err == nil {
err = somethingelse()
if err == nil {
w.WriteHeader(http.StatusOK)
return //successfully
}
}
}
log.Print("error: ", nil)
w.WriteHeader(http.StatusInternalServerError)

关于go - 从 Go 中的子函数关闭/返回 ResponseWriter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51523254/

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