gpt4 book ai didi

go - 所有应用程序都应具有的基本 Web 调整

转载 作者:IT王子 更新时间:2023-10-29 01:45:22 26 4
gpt4 key购买 nike

目前我的网络应用只是一个路由器和处理程序。

为了使这部作品有值(value),我缺少哪些重要的东西?

  1. 我相信我必须设置 procs 的数量以确保它使用最大的 goroutines?

  2. 我应该使用输出缓冲吗?

您认为还有什么遗漏的最佳实践吗?

var (
templates = template.Must(template.ParseFiles("templates/home.html")
)

func main() {
r := mux.NewRouter()
r.HandleFunc("/", WelcomeHandler)

http.ListenAndServe(":9000", r)
}

func WelcomeHandler(w http.ResponseWriter, r *http.Request) {
homePage, err := api.LoadHomePage()
if err != nil {
}
tmpl := "home"
renderTemplate(w, tmpl, homePage)
}

func renderTemplate(w http.ResponseWriter, tmpl string, hp *HomePage) {

err := templates.ExecuteTemplate(w, tmpl+".html", hp)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}

最佳答案

  1. 你不需要设置/改变runtime.GOMAXPROCS()因为从 Go 1.5 开始,它默认为可用 CPU 内核的数量。

  2. 缓冲输出?从性能的角度来看,您不需要。但您可能还有其他考虑因素。

例如,您的 renderTemplate() 函数可能会出现 panic。如果执行模板开始写入输出,则涉及在写入数据之前设置 HTTP 响应代码和其他 header 。如果之后发生模板执行错误,它将返回错误,因此您的代码会尝试发回错误响应。此时 HTTP header 已经写入,这个 http.Error()函数将尝试再次设置标题 => panic 。

避免这种情况的一种方法是首先将模板渲染到缓冲区中(例如 bytes.Buffer ),如果模板执行没有返回错误,那么您可以将缓冲区的内容写入响应编写器。如果发生错误,那么你当然不会写入缓冲区的内容,而是像你一样发回错误响应。

总而言之,您的代码在性能方面已准备就绪(不包括您处理模板执行错误的方式)。

关于go - 所有应用程序都应具有的基本 Web 调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36816412/

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