Go 处理请求参数

大数据 2023-08-12 22:10:07
3阅读

创作不易,感谢大家的支持。

一个主要写Go和PHP的菜鸟。我平时有空的时候喜欢自己写点东西。如果有什么不对的地方,欢迎指出。

Go处理请求参数并响应JSON格式数据

GET 和POST 是最常用的两种请求方法,Go 接受GET 和POST 参数方法。

处理GET请求

接受GET参数

包主

进口(

'日志'

'网络/http'

func GetHandler(w http.ResponseWriter, r *http.Request) {

查询:=r.URL.Query()

//第一种方式

//名称:=查询['名称'][0]

//第二种方式

名称:=查询。获取('姓名')

log.Printf('GET: 名称=%s\n', 名称)

}

函数主() {

http.HandleFunc('/get', GetHandler)

log.Println('正在端口8899 运行.')

错误:=http.ListenAndServe(':8899', nil)

如果错误!=nil {

log.Fatal('ListenAndServe:', err.Error())

}

}包主要

进口(

'日志'

'网络/http'

func GetHandler(w http.ResponseWriter, r *http.Request) {

m :=make(地图[字符串]字符串)

查询:=r.URL.Query()

对于k, v :=范围查询{

m[k]=v[0]

}

日志。打印长度(m)

}

函数主() {

http.HandleFunc('/get', GetHandler)

log.Println('正在端口8899 运行.')

错误:=http.ListenAndServe(':8899', nil)

如果错误!=nil {

log.Fatal('ListenAndServe:', err.Error())

}

}

处理路径参数

示例:

127.0.0.1:9090/t/loveyou.md

filename :=strings.TrimPrefix(r.URL.Path, '/t/')

处理POST请求

接受POST 请求参数。两种常见的模式是application/json 和application/x-www-form-urlencoded

1.接收类型为application/x-www-form-urlencoded的POST请求

包主

进口(

'fmt'

'日志'

'网络/http'

func PostHandler(w http.ResponseWriter, r *http.Request) {

河解析表单()

//第一种方式

用户名:=r.Form['用户名'][0]

密码:=r.Form['密码'][0]

//第二种方式

//用户名:=r.Form.Get('用户名')

//密码:=r.Form.Get('密码')

fmt.Printf('用户名=%s,密码=%s',用户名,密码)

}

函数主() {

http.HandleFunc('/post', PostHandler)

log.Println('正在端口8899 运行.')

错误:=http.ListenAndServe(':8899', nil)

如果错误!=nil {

log.Fatal('ListenAndServe:', err.Error())

}

}包主要

进口(

'日志'

'网络/http'

func PostHandler(w http.ResponseWriter, r *http.Request) {

m :=make(地图[字符串]字符串)

河解析表单()

表格:=r.PostForm

对于k, v :=范围形式{

如果len(v) 1 {

继续

}

m[k]=v[0]

}

日志。打印长度(m)

}

函数主() {

http.HandleFunc('/post', PostHandler)

log.Println('正在端口8899 运行.')

错误:=http.ListenAndServe(':8899', nil)

如果错误!=nil {

log.Fatal('ListenAndServe:', err.Error())

}

}2.接收application/json类型请求

在实际开发中,经常会有一些数据对象,我们需要以JSON的形式返回这些数据对象

接收到的请求参数:

{

'状态':'1',

'msg':'成功',

'数据':{

'当前':1,

'尺寸':20,

“总计”:1,

'用户列表':[

{

'电话':'13800000000000',

'用户名':'张三',

'身份证':'443426189012211141',

'vipRank':'',

'角色名称':'',

'projectName':'项目名称',

'账户状态':'',

'创建时间' : '2018-12-12 15:00'

}

]

}

可以使用[json-to-go]在线工具将json数据转换为struct

包主

进口(

'编码/json'

'io/ioutil'

'日志'

'网络/http'

//自动生成

类型自动生成的结构体{

状态字符串`json:'status'`

消息字符串`json:'msg'`

数据结构{

当前int `json:'current'`

大小int `json:'size'`

总计int `json:'total'`

用户列表[]结构体{

电话字符串`json:'telephone'`

用户名字符串`json:'userName'`

ID 卡字符串`json:'idCard'`

VipRank 字符串`json:'vipRank'`

角色名称字符串`json:'roleName'`

项目名称字符串`json:'projectName'`

AccountStatus 字符串`json:'accountStatus'`

CreateTime 字符串`json:'createTime'`

`json:'用户列表'`

`json:'数据'`

}

func PostJsonHandler(w http.ResponseWriter, r *http.Request) {

b、错误:=ioutil. ReadAll(r.正文)

如果错误!=nil {

日志.Println(错误)

}

log.Printf('b=%s', b)

var postJson 自动生成

json。解组([]byte(b), postJson)

json,_:=json. Marshal(postJson)

w。写入(json)

}

函数主() {

http.HandleFunc('/postJson', PostJsonHandler)

log.Println('正在端口8899 运行.')

错误:=http.ListenAndServe(':8899', nil)

如果错误!=nil {

log.Fatal('ListenAndServe:', err.Error())

}

}Postman发起application/json请求

the end
免责声明:本文不代表本站的观点和立场,如有侵权请联系本站删除!本站仅提供信息存储空间服务。