我对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")
)
答案 0 :(得分:1)
我认为您正在使用goriila mux。我检查了source code,mux.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
,因为该项目确实存在,因此不一定重要。