将参数解析为bool或只在switch语句

时间:2017-11-28 13:50:19

标签: go

我遇到过一些情况,我想使用路由来更改数据库中的某些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
    }
}

1 个答案:

答案 0 :(得分:4)

您可以看到ParseBool here的源代码。它也使用开关,但有更多的情况。如果编译器内联其代码,速度应该与您的代码非常相似。如果你想要一个明确的答案,你应该对不同的案例进行基准测试。

总的来说,我不鼓励你注意这些小细节。它只需要几纳秒,但它会使您的代码更难理解。通过分析代码来开始优化,以找到需要花费大量时间并修复它们的热点。