GoLang / Mux语法问题:如果ID,确定= mux.Vars(r)[“ ID”]; !好

时间:2019-06-28 02:54:07

标签: api go mux

我对Golang还是很陌生,我正在使用gorilla / mux读取某人的API的代码,并且遇到了这段代码。

func heroGet(w http.ResponseWriter, r *http.Request) {
    var ID string
    var Ok bool
    if ID, Ok = mux.Vars(r)["ID"]; !Ok{
        //do something
    }

我无法理解Ok在这种特定情况下会做什么,以及何时触发!Ok

请注意,此函数是GET端点。

({r.HandleFunc("/hero/{ID}", heroGet).Methods("GET")

1 个答案:

答案 0 :(得分:1)

我认为您正在使用goriila mux。我检查了source codemux.Vars()返回了一个类型为map[string]string的值。

简而言之,map数据类型可以选择返回两个值。

  1. 第一个是所请求密钥的实际值
  2. 第二个是指示是否存在带有请求键的项(布尔值)。

请看下面的例子:

vars := map[string]string{
    "one": "1",
    "two": "",
}

value1, ok1 := vars["one"]
fmt.Println("value:", value1, "is exists:", ok1)
// value: 1 is exists: true

value2, ok2 := vars["two"]
fmt.Println("value:", value2, "is exists:", ok2)
// value:  is exists: true

value3, ok3 := vars["three"]
fmt.Println("value:", value3, "is exists:", ok3)
// value:  is exists: false

从上面的示例中我们可以清楚地看到,如果所请求的项目不存在,则第二个退货将为false

如果即使该项目的值为零,该项目仍然存在,则第二个返回值仍为true,因为该项目确实存在,因此不一定重要。