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

标签 go mux

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

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 是必需的,但密码 是可选的。

最佳答案

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

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

此代码使用 the two value index expression检查 map 中是否存在该 key 。

看起来您的意图是解析 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
 }

关于go - 如果变量未定义,Mux 返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47875953/

相关文章:

go - 如何在函数中多次添加一些行?

go - 如何部署带有自定义go构建约束/标签的golang谷歌云功能?

video - 如何在使用 ffmpeg libavformat 将 VP8 RTP 流复用到 webm 时从 RTP 时间戳设置 AVPacket 的 pts 和 dts?

mongodb - 在 http 中输出一个 .mp4 文件,从数据库中提取到浏览器

go - 在我的Go代码中,为什么外部for循环运行两次

arrays - 使用的变量。但错误仍然是 "variable x not used"

go - 尝试从 Golang 执行 python 2.7 代码时出现 EOF 错误

go - 当原始 arg 是指针时如何转换类型

go - 如何对所有请求使用 gorilla 中间件处理程序?

go - 如何使用 Gorilla Mux 进行 URL 匹配?