上饶专业企业网站建设,电脑网站适应手机如何做,安卓系统软件 开发,网站做的二维码失效了Gin参数接收 文章目录 Gin参数接收1.各个参数的接收方法Gin中发送JSON数据Gin接收querystring数据Gin接收Form的参数Gin接收URI参数 2.参数绑定方式接收(更加方便)推荐一款软件 1.各个参数的接收方法
声明: 这里的c都是c *gin.Context中的c
Gin中发送JSON数据 在传输或接受JS…Gin参数接收 文章目录 Gin参数接收1.各个参数的接收方法Gin中发送JSON数据Gin接收querystring数据Gin接收Form的参数Gin接收URI参数 2.参数绑定方式接收(更加方便)推荐一款软件 1.各个参数的接收方法
声明: 这里的c都是c *gin.Context中的c
Gin中发送JSON数据 在传输或接受JSON数据时,通常习惯通过创建结构体的方式存储数据 注意点: 结构体中成员名需要大写字母开头,否则无法访问需要再成员名后添加tag标签 ,方便传输以及接收数据 方法 func (c *Context) JSON(code int, obj any) {}code是状态码,例如:http.StatusOK这是go语言内置变量obj指需要传入的数据 代码案例: package mainimport (github.com/gin-gonic/ginlognet/http
)// User 构建数据结构(存储json数据
// 注意:1.需要大写字母开头否则无法访问
// 注意:2.json是tag标签,这样方便定义前端显示名称
type User struct {Name string json:nameGender string json:genderAge int json:age
}func main() {//启动服务器r : gin.Default()//发起请求r.GET(/Json, func(c *gin.Context) {data : User{Name: 贤哥,Gender: 男,Age: 18,}c.JSON(http.StatusOK, gin.H{data: data,})})//运行服务器err : r.Run(:9000)if err ! nil {log.Println(启动错误:, err)}
} 传数据习惯用gin中的gin.H{} Gin接收querystring数据 介绍: //querystring 数据是在URl上的参数,例如:https://www.bing.com/search?q邓超
//这里的q 邓超就是querystring,其中q是变量,邓超是值方法: c.Query(key):根据变量名接收值c.DefaultQuery(key,defaultValue):根据变量名接收值,如果没有该变量,就输出定义好的值c.GETQuery(key):返回值有两个,一个是接收到的值,一个是布尔值,可以通过判断布尔值查看是否接受到值 代码案例 package mainimport (github.com/gin-gonic/ginlognet/http
)//querystring 数据是在URl上的参数,例如:https://www.bing.com/search?q邓超
//这里的q 邓超就是querystring,其中q是变量,邓超是值type User struct {Name string json:nameAge string json:age
}func main() {//创建Gin变量r : gin.Default()//发起请求r.GET(/query, func(c *gin.Context) {//单纯接收querystring的值data1 : c.Query(query)//接收querystring,如果没有接收到值就,输出定义好的值(类似这里的nothing)data2 : c.DefaultQuery(query, nothing)//获取querystring的值,返回当前值和bool值,如何bool为false,默认返回空值data3, ok : c.GetQuery(query)if !ok {data3 nothing}//可以将querystring的值,解析到结构体中存储//注意:结构体的成员名和querystring的变量名必须一致,否则解析不到var user Usererr : c.BindQuery(user)if err ! nil {log.Println(err)return}//可以用于相同变量却有多个值的情况接收变量,接收后的变量会被保存在切片中//query尼玛querytm 输出 query4:[尼玛,tm]data4 : c.QueryArray(query)//通过Json数据发出c.JSON(http.StatusOK, gin.H{query1: data1,query2: data2,query3: data3,query4: data4,user: user,})})//启动服务器err : r.Run(:9000)if err ! nil {log.Println(启动失败:, err)}
} Gin接收Form的参数 结论: 方法的用法和querystring的基本一致 代码: package mainimport (github.com/gin-gonic/ginlognet/http
)//任务:接收form的数据
//1.创建form表单
//2.解析数据func main() {r : gin.Default()//解析模板r.LoadHTMLFiles(./login.html, ./index.html)//渲染模板(渲染登录页面r.GET(/login, func(c *gin.Context) {c.HTML(http.StatusOK, login.html, nil)})//点击form的登录按钮提交数据后会发起method方法的请求//所以得写一个post方法以及,输出数据到post渲染的网页r.POST(/login, func(c *gin.Context) {//单个接收表单数据//username : c.PostForm(username)password : c.PostForm(password)//单个接收表单的数据,如果没有参数就输出notDefault//username : c.DefaultPostForm(username, notDefault)//以数组的方式接收值username : c.PostFormArray(username)//password, ok : c.GetPostForm(username)c.HTML(http.StatusOK, index.html, gin.H{username: username[0],password: password,})//总结接收表单数据的各种函数基本和接收querystring参数的用法一致})//启动服务器err : r.Run(:9000)if err ! nil {log.Println(err)return}
}
Gin接收URI参数 介绍 //了解什么是URI参数
//例如一条URL为http://ouzhenxian.com/blog/2023/1
//这里的URL中,可以指定2023和1为参数(是否是参数是由你的接收格式决定的
//格式: /blog/:year/:mouth,:后面的参数就是需要被接收的数据c.Param方法和querystring用法基本一致 代码: package mainimport (github.com/gin-gonic/ginnet/http
)
func main() {r : gin.Default()r.GET(/blog/:year/:mouth, func(c *gin.Context) {year : c.Param(year)mouth : c.Param(mouth)c.JSON(http.StatusOK, gin.H{year: year,mouth: mouth,})})//启动服务器err : r.Run(:9000)if err ! nil {return}
}2.参数绑定方式接收(更加方便) 核心方法c.ShouldBind() 优点: 相比前面的更加快捷高效 代码展示 package mainimport (fmtgithub.com/gin-gonic/ginlognet/http
)//任务: 利用ShouldBind()函数绑定参数type UserInfo struct {Username string json:username form:username uri:username query:username //注意2点: 字段名需要大写,需要写tag,否则找不到Password string json:password form:password uri:password query:password
}func main() {r : gin.Default()//发出请求r.GET(/json, func(c *gin.Context) {var user UserInfoerr : c.ShouldBindJSON(user) //注意:这里需要写,否则是值传递,无法修改值if err ! nil {log.Println(err)return}//处理数据fmt.Printf(%#v\n, user) //一起输出c.JSON(http.StatusOK, gin.H{status: ok,})})r.GET(/query, func(c *gin.Context) {var user UserInfoerr : c.ShouldBindQuery(user) //注意:这里需要写,否则是值传递,无法修改值if err ! nil {log.Println(err)return}//处理数据fmt.Printf(%#v\n, user) //一起输出c.JSON(http.StatusOK, gin.H{status: ok,})})r.POST(/form, func(c *gin.Context) {var user UserInfoerr : c.ShouldBind(user) //注意:这里需要写,否则是值传递,无法修改if err ! nil {log.Println(err)return}//处理数据fmt.Printf(%#v\n, user) //一起输出c.JSON(http.StatusOK, gin.H{status: ok,})})r.GET(/uri/:username/:password, func(c *gin.Context) {var user UserInfoerr : c.ShouldBindUri(user) //注意:这里需要写,否则是值传递,无法修改值if err ! nil {log.Println(err)return}//处理数据fmt.Printf(%#v\n, user) //一起输出c.JSON(http.StatusOK, gin.H{status: ok,})})//启动服务器err : r.Run(:8080)if err ! nil {log.Println(err)return}}注意点: 1.结构体成员名首字母大写2.需要指定tag3.ShouldBind()接受的值必须是地址值(例如:user) 说明: Gin框架中不是每个数据格式都有对应的ShouldBind函数 例如:这里的JSON数据有—c.ShouldBindJSON(user),而这里的表单Form数据没有对应的和函数,那就使用通用的c.ShouldBind(user) 推荐一款软件
Postman软件: 在做网络开发过程中可以非常方便的传输数据测试,有兴趣的可以自行查看,该软件需要科学