厚土Go学习笔记 | 36. web服务指定路径下的get参数接收与处理
时间:2022-05-04
本文章向大家介绍厚土Go学习笔记 | 36. web服务指定路径下的get参数接收与处理,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
当我们使用go建立了服务器,那么一种常见的需求就摆在面前。如何给这个服务器的某个路径传参数呢?我们研究一下URL传参的接收与处理。
对于 http.Request 发出的请求,我们需要使用到 URL.Query().Get("XXX")
这次模拟建立一个价格查询页面
首先建立一个 dollars 类型,用以保存货币数值。
type dollars float32
对 dollars 建立一个 String()
方法,用以确定显示格式
func (d dollars) String() string { return fmt.Sprintf("$%.2f", d) }
建立一个 map 字典,保存多种东西的价格。
type MyHandler map[string]dollars
在 http.Handler
中处理路径和接收参数的操作
func (self MyHandler) ServeHTTP(w http.ResponseWriter, req *http.Request)
完整代码示例
package main
import (
"fmt"
"net/http"
"log"
)
type dollars float32
func (d dollars) String() string { return fmt.Sprintf("$%.2f", d) }
type MyHandler map[string]dollars
func (self MyHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
switch req.URL.Path {
case "/list":
for item, price := range self {
fmt.Fprintf(w, "%s: %sn", item, price)
}
case "/price":
item := req.URL.Query().Get("item")
//item2 := req.Form.Get("item")
price, ok := self[item]
if !ok {
w.WriteHeader(http.StatusNotFound) // 404
fmt.Fprintf(w, "no such item: %qn", item)
return
}
fmt.Fprintf(w, "%sn", price)
default:
w.WriteHeader(http.StatusNotFound) // 404
fmt.Fprintf(w, "no such page: %sn", req.URL)
}
}
func main() {
handler := MyHandler{"shoes": 50, "socks": 5}
log.Fatal(http.ListenAndServe(":4000", handler))
}
程序运行后,直接访问 http://localhost:4000/ 结果如下
no such page: /
访问 http://localhost:4000/list 结果如下
shoes: $50.00
socks: $5.00
访问 http://localhost:4000/price 结果如下
no such item: ""
这个路径是需要正确参数的,所以需要访问 http://localhost:4000/price?item=socks 结果如下
$5.00
http://localhost:4000/price?item=shoes 结果如下
$50.00
本例可以解决大部分跨页面传参和处理的基本方式了。
如果你不希望自己传递的参数出现在地址栏,那么需要在发出请求的页面上使用 post 方法。当然,接收页面也需要更换相应的接收方法。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 用Python打造一款文件搜索工具,所有功能自己定义!
- 解决SSH登录缓慢
- Html ul、li Css标签详解 使用图片自定义样式 隐藏小点样式齐全
- TRTC Android端开发接入学习之实现视频通话(五)
- 让WordPress默认用户无法进入后台
- 图像处理笔记(2)----OpenCV imread函数详解
- 面试官:来写个代码求一下两个数的最大公约数吧
- 聊聊BitCaskLock
- 自动化构建工具~Maven
- 聊聊BitCaskKeyDir
- 使用 Node.js 定制你的技术雷达:上篇
- css画div对角线
- redis学习笔记--redis过期机制学习
- 猿实战08——属性库实现之属性关系绑定
- 猿实战07——属性库之实现电商系统基石模块