创作不易,感谢大家的支持。
一个主要写Go和PHP的菜鸟。我平时有空的时候喜欢自己写点东西。如果有什么不对的地方,欢迎指出。
GET 和POST 是最常用的两种请求方法,Go 接受GET 和POST 参数方法。
接受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 请求参数。两种常见的模式是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请求