我遇到过一些情况,我想使用路由来更改数据库中的某些Is_Active
字段,但我对性能感到好奇。
让我们有一个路由处理程序:
func testHandler(r *mux.Router) {
r.HandleFunc("/test/{status}" statusHandler).Methods("GET")
}
现在该参数只会是0或1,除非用户尝试其他方法,但除非是0或1,否则不会发生任何事情。我的问题是,将字符串解析为布尔值会更快,这将涉及到在strconv
包中或者只是对字符串进行切换会更快吗?
两者的例子:
func statusHandler(w http.ResponseWriter, r *http.Request) {
v := mux.Vars(r)
active, err := strconv.ParseBool(v["status"])
// Handle err
if active {
// Do something
} else {
// Do something else
}
}
或
func statusHandler(w http.ResponseWriter, r *http.Request) {
v := mux.Vars(r)
switch v["status"] {
case "0":
// Do something
case "1":
// Do something else
default:
// Throw 500 Error
}
}
答案 0 :(得分:4)
您可以看到ParseBool
here的源代码。它也使用开关,但有更多的情况。如果编译器内联其代码,速度应该与您的代码非常相似。如果你想要一个明确的答案,你应该对不同的案例进行基准测试。
总的来说,我不鼓励你注意这些小细节。它只需要几纳秒,但它会使您的代码更难理解。通过分析代码来开始优化,以找到需要花费大量时间并修复它们的热点。