一个简单的web服务器

  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "net/http"
  6. )
  7. func main() {
  8. http.HandleFunc("/", handler)
  9. log.Fatal(http.ListenAndServe("localhost:8888", nil))
  10. }
  11. func handler(w http.ResponseWriter, r *http.Request) {
  12. fmt.Println("url.path is ", r.URL.Path)
  13. }

简单看下Request结构体中几个重要成员

  1. type Request struct {
  2. // Form contains the parsed form data, including both the URL
  3. // field's query parameters and the POST or PUT form data.
  4. // This field is only available after ParseForm is called.
  5. // The HTTP client ignores Form and uses Body instead.
  6. Form url.Values
  7. // PostForm contains the parsed form data from POST, PATCH,
  8. // or PUT body parameters.
  9. //
  10. // This field is only available after ParseForm is called.
  11. // The HTTP client ignores PostForm and uses Body instead.
  12. PostForm url.Values
  13. // MultipartForm is the parsed multipart form, including file uploads.
  14. // This field is only available after ParseMultipartForm is called.
  15. // The HTTP client ignores MultipartForm and uses Body instead.
  16. MultipartForm *multipart.Form
  17. }

获取get参数

  1. func handler(w http.ResponseWriter, r *http.Request) {
  2. r.ParseForm()
  3. fmt.Println("value of param key is:", r.Form.Get("key"))
  4. }

获取post参数

提交方式: application/x-www-form-urlencoded

  1. func handler(w http.ResponseWriter, r *http.Request) {
  2. r.ParseForm()
  3. fmt.Println("value of param key is:", r.PostFormValue("key"))
  4. }

提交方式: json

  1. type RequestParm struct {
  2. Name string `json:"name"`
  3. Age int `json:"age"`
  4. ScoreList []int `json:"score_list"`
  5. }
  6. // NewDecoder
  7. func handler(w http.ResponseWriter, r *http.Request) {
  8. req := &RequestParm{}
  9. err := json.NewDecoder(r.Body).Decode(req)
  10. if err != nil {
  11. fmt.Println("json decode error")
  12. return
  13. }
  14. fmt.Println(req)
  15. }
  16. // Unmarshal
  17. func handler(w http.ResponseWriter, r *http.Request) {
  18. req := &RequestParm{}
  19. body, err := ioutil.ReadAll(r.Body)
  20. if err != nil {
  21. panic(err)
  22. }
  23. err = json.Unmarshal(body, req)
  24. if err != nil {
  25. panic(err)
  26. }
  27. fmt.Println(req)
  28. }

参考资料

四种常见的 POST 提交数据方式

golang server示例的更多相关文章

  1. Golang爬虫示例包系列教程(一):pedaily.com投资界爬虫

    Golang爬虫示例包 文件结构 自己用Golang原生包封装了一个爬虫库,源码见go get -u -v github.com/hunterhug/go_tool/spider ---- data ...

  2. Golang gRPC 示例

    1.安装gRPC runtime go get google.golang.org/grpc 为了自动生成Golang的gRPC代码,需要安装protocal buffers compiler以及对应 ...

  3. Mysql Federated Server 示例

    Federated存储引擎访问在远程数据库的表中的数据,而不是本地的表.创建一个Federated表的时候,服务器在数据库目录创建一个表定义文件.无其它表被创建,因为实际的数据在一个远程数据库上.这不 ...

  4. go Server示例

    示例1: package main import ( "fmt" "log" "net/http" "time" ) f ...

  5. SQL SERVER示例:修改自定义数据类型精度

    /*--修改自定义数据类型精度的示例      自定义数据类型一旦被引用,就不能再修改和删除,如果要修改数据的精度,就非常麻烦,下面的示例演示了如何修改      假设要修改的自定义变量名为aa -- ...

  6. golang multiconfig 示例

    参考资料:https://github.com/koding/multiconfig 测试代码: package main import ( "fmt" "github. ...

  7. golang语言示例

    package main import "fmt" /* my first programmer in go */ func fib(n int) int{ if n<2{ ...

  8. golang json 示例

    jsonStr, err := client.Get( deviceIdKey ).Result() if err == redis.Nil { deviceIds = []string{device ...

  9. golang操作redis/go-redis库

    目录 Redis介绍 Redis支持的数据结构 Redis应用场景 准备Redis环境 go-redis库 安装 连接 普通连接 V8新版本相关 连接Redis哨兵模式 连接Redis集群 基本使用 ...

随机推荐

  1. 同步工具类—— CountDownLatch

    本博客系列是学习并发编程过程中的记录总结.由于文章比较多,写的时间也比较散,所以我整理了个目录贴(传送门),方便查阅. 并发编程系列博客传送门 CountDownLatch简介 CountDownLa ...

  2. Gallery实现图片拖动切换

    Gallery中文意思为画廊,通过Gallery能够实现用手指在屏幕上滑动实现图片的拖动.效果如下: 上面,为了学习了解,只用了android默认的Icon图片. 主程序中创建了一个继承自BaseAd ...

  3. matlab将数据读取和写入txt文档

    原文链接 matlab中打开文件 fid = fopen(文件名,‘打开方式’): 说明:fid用于存储文件句柄值,如果fid>0,这说明文件打开成功. 另外,在这些字符串后添加一个“t”,如‘ ...

  4. TcxLookupComboBox

    1.绑定数据源显示 cxLookupComboBox1.Properties.DropDownAutoSize:=true; //设置下拉列表为自适应宽度 cxLookupComboBox1.Prop ...

  5. 【Spring源码分析】预备篇

    前言 最新想学习一下Spring源码,开篇博客记录下学习过程,欢迎一块交流学习. 作为预备篇,主要演示搭建一个最简单的Spring项目样例,对Spring进行最基本梳理. 构建一个最简单的spring ...

  6. 尝试用Vue.js开发网页小游戏的过程

    准备 首先去官方下载并安装VSCODE,下载地址 https://code.visualstudio.com/.安装后打开会发现是英文版的,需要去安装插件来汉化.具体是在扩展插件搜索chinese,选 ...

  7. Java 网络编程 -- 基于TCP实现文件上传

    Java TCP 操作基本流程 一.创建服务器 1.指定端口, 使用serverSocket创建服务器 2.阻塞式连接 accept 3.操作:输入流 输出流 4.释放资源 二.创建客户端 1.使用S ...

  8. 关于json转义中文

    服务器传递或者程序传递中,不识别读取到的JSON数据中 \u开头的数据. PHP 生成JSON的时候,必须将汉字不转义为 \u开头的UNICODE数据. 网上很多,但是其实都是错误的,正确的方法是在j ...

  9. 关于join on 和单表查询的实时效果

    当数据量大(10W单位级)的时候,join的优势,会被单表查询超过. 以下是两张表单查和两张表联查的时间对比,同时,这样的记录有局限性的. 一.数据量少时: 单表查: 表一:显示行 0 - 2 ( 3 ...

  10. Netty 中的心跳检测机制

    心跳检测一般存在于建立长连接 或者 需要保活的场景. 心跳的使用场景 长连接的应用场景非常的广泛,比如监控系统,IM系统,即时报价系统,推送服务等等.像这些场景都是比较注重实时性,如果每次发送数据都要 ...