如果变量未定义,则返回Mux?

问题描述 投票:1回答:1

我想处理没有定义参数的情况。

import (
    // ...
    "github.com/gorilla/mux"
)

func main() {
    router := mux.NewRouter()
    router.HandleFunc("/connect", Connect).Methods("POST")
    log.Fatal(http.ListenAndServe(":7777", router))
}



// ...

func Connect(w http.ResponseWriter, r *http.Request) {
    params := mux.Vars(r)

    if params["password"] == nil {
        fmt.Println("login without password")
    } else {
        fmt.Println("login with password")
    }
}

我也试过if !params["ssid"] {

这个的正确语法是什么?


随着mux.Vars(r)我试图从以下方面捕获后的参数:

curl -H 'Content-Type: application/json' -d '{"ssid":"wifi"}' -X POST http://localhost:7777/connect

ssid是必需的,但password是可选的。

go mux
1个回答
3
投票

使用以下命令检查是否存在mux请求变量:

params := mux.Vars(r)   
password, ok := params["password"] 
if ok {
   // password is set
} else {
   // password is not set
}

此代码使用the two value index expression检查地图中是否存在密钥。

看起来你的意图是解析JSON请求体而不是访问mux变量。在处理程序中执行此操作:

 var m map[string]string
 err := json.NewDecoder(r.Body).Decode(&m)
 if err != nil {
     // handle error
 }
 password, ok := m["password"]
 if ok {
   // password is set
 } else {
   // password is not set
 }
© www.soinside.com 2019 - 2024. All rights reserved.