我对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"))

最佳答案

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

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

  • 第一个是根据所请求键
  • 的实际值
  • 第二个是指示是否存在带有请求键的项(布尔值)。

  • 请看下面的例子:

    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,因为该项目确实存在,不一定重要该值是什么。

    关于api - GoLang/Mux语法问题:如果ID,确定= mux.Vars(r)[“ID”]; !好,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56800387/

    10-12 20:06