golang获取用户输入的几种方式

一、定义结构体

type UserInfo struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
    Add  string `json:"add"`
}

type ReturnData struct {
    Message string   `json:"message"`
    Status  string   `json:"status"`
    Data    UserInfo `json:"data"`
}

二、get请求的Query方法

func getBindUser(c *gin.Context) {
    //query用来获取用户输入的参数
    name := c.Query("name")
    //用来转换用户输入的参数为数字
    age, _ := strconv.Atoi(c.Query("age"))
    //用来获取用户输入的参数,并设置默认值为 "上海"
    add := c.DefaultQuery("add", "上海")
    //结构体实例化后与用户输入参数绑定
    userinfo := UserInfo{
        Name: name,
        Age:  age,
        Add:  add,
    }
    //结构体实例化并接收用户输入的参数进行绑定,实例化有两种方式,下面注释的算一种,未注释的是另一种
    // returnData := make(map[string]interface{})
    returnData := ReturnData{}
    returnData.Message = "加载配置成功!"
    returnData.Status = "200"
    returnData.Data = userinfo
    c.JSON(http.StatusOK, returnData)
    fmt.Println(returnData)
}

三、post请求
1.获取用户输入参数的方法,并直接绑定到json格式

func returnDataBindUser(c *gin.Context) {
    userInfo := UserInfo{}
    if err := c.ShouldBindJSON(&userInfo); err != nil {
        c.JSON(http.StatusOK, gin.H{
            "messages": "加载配置失败!",
            "status":   500,
        })
        fmt.Println("参数传递失败。。。", err.Error())
    } else {
        c.JSON(http.StatusOK, userInfo)
        fmt.Printf("姓名:%s\n年龄:%d\n地址:%s\n", userInfo.Name, userInfo.Age, userInfo.Add)
    }
}

2.第二种方式就是用formdata,此函数用from-data方式获取

//此方式并不是传输的json格式数据,只适合用于少量数据传输,如需要json格式,还需调用json方法绑定
c.GetPostForm()

四、这儿设置一下token的获取,并为用jwt方式,只是通过用户输入任意字符来判断是否带有token用来做个测试这个功能的安全是否成功

func glbloTokenIsNo(c *gin.Context) {
    //这块儿是用户输入的任意字符当做token,脚本架部分会用到jwt
    token := c.Query("token")
    //这块儿会判断是否为空串,字符串要用空串判断,数字才可以用!=nil判断
    if token == "" {
        returnData := ReturnData{
            Message: "获取token失败!",
            Status:  "401",
        }
        c.JSON(http.StatusOK, returnData)
    }
    c.String(200, "登录成功!")
}

五、路由分组
注:开始不懂为什么要分组,后来明白了,分组主不是用来管理路由,比如:你的访问url特别长,像/api/user/addUser/和/api/user/deleteUser这两个就可以将/api/app分为一组

apiGroup := r.Group("/api/user")

使用的时候就可以写成如下这样

//这样apiGroup就代表/api/user了
apiGroup.POST("/addUser", returnDataBindUser)

你可能感兴趣的:(golang,开发语言,后端)