当前位置: 首页 > wzjs >正文

房地产设计方案视频优化是什么意思

房地产设计方案,视频优化是什么意思,可以做ppt的网站,高校网站建设重要作用Go语言的net/http包提供了一些列用于表示HTTP报文的解构。我们可以使用它处理请求和发送响应。其中request结构体代表了客户端发生的请求报文。 核心字段获取方法 1. 请求行信息 通过 http.Request 结构体获取: func handler(w http.ResponseWriter, r *http.Req…

Go语言的net/http包提供了一些列用于表示HTTP报文的解构。我们可以使用它处理请求和发送响应。其中request结构体代表了客户端发生的请求报文。

核心字段获取方法

1. 请求行信息

通过 http.Request 结构体获取:


func handler(w http.ResponseWriter, r *http.Request) {// 请求方法(GET/POST等)fmt.Println("Method:", r.Method)  // 完整URLfmt.Println("URL:", r.URL.String())  urlPath := r.URL.Path       // 请求路径(如 "/api/data")fmt.Println("请求路径:",urlPath) //直接获取原始查询字符串rawQuery := r.URL.RawQuery fmt.Fprintf(w, "Raw Query: %s", rawQuery)
// 方法2:直接获取已解析的 Values(推荐)values := r.URL.Query()
//url.Values 类型:本质是 map[string][]string,支持多值参数(如 ?tags=go&tags=web)tags := values["tags"] // 返回字符串切片 []string{"go", "web"}fmt.Println("查询字符串tags:", tags ) q := values.Get("q") // 返回第一个值,若不存在则返回空字符串 fmt.Println("查询字符串q:", q) if page, ok := values["page"]; ok {// 参数存在 fmt.Println("page参数存在:", page)}else{fmt.Println("page参数不存在,需要给出默认值:", page)}// 协议版本fmt.Println("Protocol:", r.Proto)  
}

RawQuery 中的参数是 已编码 的(如空格为 %20),需使用 url.QueryUnescape 解码: 

decoded, _ := url.QueryUnescape(r.URL.RawQuery)

频繁操作查询参数时,优先使用 r.URL.Query() 缓存解析结果,避免重复解析。

2. 请求头信息

使用 Header 字段读取:

规范化的头字段名

Go 会自动将头字段名规范化(首字母大写),例如:

  • user-agent → User-Agent
  • content-type → Content-Type

//1. 获取单个头信息值
//Get() 方法:返回指定键的第一个值(适用于单值头字段)。encoding := r.Header.Get("Accept-Encoding") // 返回 "gzip"//直接访问 map:获取值的切片(需处理空值情况)。if values := r.Header["User-Agent"]; len(values) > 0 {{userAgent = values[0]
}}// 获取多值头信息
//Values() 方法(Go 1.14+):返回所有值的切片。
encodings := r.Header.Values("Accept-Encoding") // ["gzip", "deflate"]// 遍历所有头部
for key, values := range r.Header {fmt.Printf("%s: %v\n", key, values)
}
3. 查询参数(URL 参数)

手动解析 URL 中的 Query 参数:

// 方法:手动解析(需处理错误)
decoded, _ := url.QueryUnescape(r.URL.RawQuery)
values, err := url.ParseQuery(decoded)
if err != nil {http.Error(w, "Invalid query", http.StatusBadRequest)return 
}
4. 请求体内容

根据 Content-Type 处理不同格式的请求体:

// 读取全部内容(适用于小数据)
body, err := ioutil.ReadAll(r.Body)
if err != nil {http.Error(w, "Read body failed", http.StatusBadRequest)return
}
fmt.Println("Body:", string(body))// 关闭Body(必须)
defer r.Body.Close()

a. 表单数据(Form Data)

err := r.ParseForm()                 // 显式解析表单 
username := r.FormValue("username")  // 获取单个字段(也可以获取url传递过来的参数) 
allFormData := r.PostForm            // 获取全部表单数据(map类型,不含url传递过来的参数)
allFormData2 := r.Form       // 获取全部表单数据(map类型,包含url传递过来的参数)

 

 FormValue会隐式调用解析。

例子:

    <div class="login-container"><h2>系统登录</h2><form action="/api?username=lisi&pwd=wangwu" method="post"><div class="form-group"><label>用户名:</label><input type="text" name="uname" value="赵六" required></div><div class="form-group"><label>密码:</label><input type="password" name="pwd" value="123" required></div><button class="btn-login" type="submit">登录</button></form></div>
func apiHandler(w http.ResponseWriter, r *http.Request) {username1 := r.FormValue("username")uname1 := r.FormValue("uname")pwd1 := r.FormValue("pwd")allFormData := r.PostFormusername2 := allFormData["username"]uname2 := allFormData["uname"]pwd2 := allFormData["pwd"]allData := r.Formusername3 := r.Form["username"]uname3 := r.Form["uname"]pwd3 := r.Form["pwd"]fmt.Println("FormValue方法:", username1, uname1)fmt.Println("FormValue方法:", pwd1)fmt.Println("==========")fmt.Println("PostForm:", allFormData)fmt.Println("PostForm:", username2, uname2)fmt.Println("PostForm:", pwd2)fmt.Println("==========")fmt.Println("allData:", allData)fmt.Println("allData:", username3, uname3)fmt.Println("allData:", pwd3)}

b. JSON 数据

body, _ := io.ReadAll(r.Body)        // 读取原始Body 
var data map[string]interface{}
json.Unmarshal(body, &data)           // 反序列化到结构体 

c. 文件上传(Multipart)

package mainimport ("fmt""io/ioutil""net/http"
)func uploadHandler(w http.ResponseWriter, r *http.Request) {// 限制请求体大小(防大文件攻击)r.ParseMultipartForm(10 << 20) // 10MB// 获取普通表单字段title := r.FormValue("title")// 处理文件上传file, _, err := r.FormFile("file")if err != nil {http.Error(w, "文件上传失败", http.StatusBadRequest)return}defer file.Close()// 保存文件data, _ := ioutil.ReadAll(file)ioutil.WriteFile("/uploads/"+title, data, 0644)fmt.Fprintln(w, "上传成功")
}func main() {http.HandleFunc("/upload", uploadHandler)http.ListenAndServe(":8080", nil)
}


文章转载自:

http://KGDfAttQ.kfstq.cn
http://DmnPJ9mD.kfstq.cn
http://Q4VXr16L.kfstq.cn
http://XTlLwAoK.kfstq.cn
http://cNZJeKfM.kfstq.cn
http://wbmSKhoQ.kfstq.cn
http://LwRYR0dN.kfstq.cn
http://iwd1GUc5.kfstq.cn
http://kuIwlDt5.kfstq.cn
http://lRIQO9Q0.kfstq.cn
http://QhuHLx9f.kfstq.cn
http://v6r9o1tk.kfstq.cn
http://cdefjQvx.kfstq.cn
http://cjWAc7VZ.kfstq.cn
http://iFOWLXpe.kfstq.cn
http://SxxoO8Vf.kfstq.cn
http://XvIBTncE.kfstq.cn
http://oskh6lOk.kfstq.cn
http://dIo23clo.kfstq.cn
http://T6v5R3mv.kfstq.cn
http://AeEIq31L.kfstq.cn
http://ecxtc6Ck.kfstq.cn
http://TFVpuGGa.kfstq.cn
http://IXF6iqMD.kfstq.cn
http://pM5vgvKY.kfstq.cn
http://8qNx5Uan.kfstq.cn
http://isqdcIIW.kfstq.cn
http://kez0TOKU.kfstq.cn
http://eEUa9Zo0.kfstq.cn
http://WZp8dBPU.kfstq.cn
http://www.dtcms.com/wzjs/691029.html

相关文章:

  • 公司网站源码 带wap手机站个人网页代码模板
  • 怎么做营销型网站设计isapi_rewrite wordpress
  • 织梦网站后台进不去深圳网站建设公司麦
  • 嘉兴网站开发与制作网站建设费用进会计什么科目
  • 您网站建设ps做网站字号大小
  • 宁波市环境建设保护局网站全球旅游网站排名
  • 响应式网站的宽度微信推广平台
  • 两个域名同一个网站做优化泉州网站建设多少钱
  • 营销型网站建设域名wordpress保存php失败
  • 帝国网站认证码免费下载app并安装
  • 网站怎么做需要花钱吗十大传媒公司排名
  • 建站平台 在线提交表格功能门户网站建设工具
  • seo优化网站快速排名建站快车管理
  • 建设储蓄卡网站怎么建立自己的网站域名
  • 建设局网站投诉网站建设的实施制作阶段包括
  • 企业网站推广外包合肥浦发建设集团网站
  • 形象类网站网站总体设计怎么写
  • 上海公司牌照价格走势seo顾问服务 乐云践新专家
  • 山东网站建设哪里有广州市公司网站建设报价
  • 服装网站建设图南京网站建设 w
  • 金融网站建设报价方案江西建设职业技术学院最新官方网站
  • 手机网站开发库网站建设分析
  • 行业网站运营制作书签图片
  • 秦皇岛庆云网站建设做网站的是什么工程师
  • 自己建立网站用什么软件备案成功后怎么建网站
  • 做彩票生意要登陆哪个网站沈阳建设局网站首页
  • 做非法网站的有没有优化品牌seo关键词
  • 物流行业网站建设市场分析无锡百度关键词优化
  • 公司宣传网站制作企业首页网站属于什么类型网站
  • 06627网页制作与网站建设wordpress工作机制