Api GoLang/Mux语法问题:如果ID,Ok=Mux.Vars(r)[“ID”]!好啊

Api GoLang/Mux语法问题:如果ID,Ok=Mux.Vars(r)[“ID”]!好啊,api,go,mux,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在这种特定情况下以及在什么时候做什么!正常将触发 请注意,此函数是GE

我对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在这种特定情况下以及在什么时候做什么!正常将触发

请注意,此函数是
GET
endpoint


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

我假设您使用的是goriila mux。我在上进行了检查,
mux.Vars()
返回一个类型为
map[string]string
的值

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

  • 第一个是根据请求的键的实际值
  • 第二个是指示是否存在具有请求键的项(布尔值)
  • 请看下面的示例:

    vars:=map[string]string{
    “一”:“一”,
    “二”:“二”,
    }
    值1,ok1:=变量[“一”]
    fmt.Println(“值:”,值1,“存在:”,ok1)
    //值:1是否存在:true
    值2,ok2:=变量[“两”]
    fmt.Println(“值:”,值2,“存在:”,ok2)
    //值:is exists:true
    值3,ok3:=变量[“三”]
    fmt.Println(“值:”,值3,“存在:”,ok3)
    //值:is exists:false
    
    从上面的例子中我们可以清楚地看到,如果请求的项目不存在,那么第二次返回将是
    false


    如果即使值为零值,该项仍然存在,则第二次返回仍将是
    true
    ,因为该项确实存在,其值不一定重要。

    调用
    mux.Vars(r)
    返回一个映射,
    [“ID”]
    尝试使用键
    “ID”
    从映射中检索值。在Go中索引到映射可以选择性地返回两个值,(1)映射到提供键的值,(2)指示值是否实际映射到键的布尔值。。。。然后
    !当映射不包含
    ID
    键值时,将触发Ok