使用 net/http 标准库创建一个 httprestful api 的服务端,用来处理 GETPOST 等请求。

源代码如下:

package mainimport ("encoding/json""fmt""net""net/http""strconv""time"
)type Contact struct {Home string `json:"home"`Cell string `json:"cell"`
}type Student struct {Name    string  `json:"name"`Year    string  `json:"year"`Contact Contact `json:"contact"`
}// 任务的HTTP接口
type ApiServer struct {httpServer *http.Server
}// HTTP接口应答
type Response struct {Errno int         `json:"errno"`Msg   string      `json:"msg"`Data  interface{} `json:"data"`
}// 构造一个响应
func BuildResponse(errno int, msg string, data interface{}) ([]byte, error) {// 1, 定义一个responseresponse := &Response{Errno: errno,Msg:   msg,Data:  data,}// 2, 序列化jsonresp, err := json.Marshal(response)return resp, err
}func saveFunction(resp http.ResponseWriter, req *http.Request) {// 1, 解析 POST 表单err := req.ParseForm()if err != nil {fmt.Printf("ParseForm error: %s\n", err)}// 获取表单中所有字段内容fmt.Printf("req.PostForm is %v", req.PostForm)// 2, 取表单中的 name 字段name := req.PostForm.Get("name")fmt.Printf("name: %s\n", name)contactInfo := req.PostForm.Get("contact")fmt.Printf("contactInfo: %s\n", contactInfo)// 3, 反序列化jobvar contact Contacterr = json.Unmarshal([]byte(contactInfo), &contact)fmt.Printf("contact: %s\n", contact)if err != nil {fmt.Printf("Unmarshal error: %s\n", err)}// 4, 保存到数据库// saveToDB()// 5, 返回正常应答 ({"errno": 0, "msg": "", "data": {....}})bytes, err := BuildResponse(0, "success", contact)if err == nil {resp.Write(bytes)}
}func listFunction(resp http.ResponseWriter, req *http.Request) {// 1. 解析GET参数err := req.ParseForm()if err != nil {fmt.Printf("ParseForm error: %s\n", err)}// 2. 获取请求参数 /api/list?name=wohuname := req.Form.Get("name")fmt.Printf("name: %s\n", name)// 3. 从数据库中读取对应的字段值后显示// ret := queryDB()// 4. 返回正常应答 ({"errno": 0, "msg": "", "data": {....}})bytes, err := BuildResponse(0, "success", name)if err == nil {resp.Write(bytes)}
}// 初始化服务
func InitApiServer() (err error) {// 配置路由mux := http.NewServeMux()mux.HandleFunc("/api/save", saveFunction)// mux.HandleFunc("/api/del", delFunction)// mux.HandleFunc("/api/update", updateFunction)mux.HandleFunc("/api/list", listFunction)// 启动TCP监听listener, err := net.Listen("tcp", ":"+strconv.Itoa(8070))if err != nil {return}// 创建一个HTTP服务httpServer := &http.Server{ReadTimeout:  100 * time.Millisecond,WriteTimeout: 100 * time.Millisecond,Handler:      mux,}// 启动了服务端go httpServer.Serve(listener)return
}func main() {InitApiServer()// 正常退出for {time.Sleep(1 * time.Second)}
}

然后使用 Postman 工具发送 GETPOST 请求:

Go 学习笔记(78)— Go 标准库 net/http 创建服务端(接收 GET、POST 请求)相关推荐

  1. python基础教程_学习笔记14:标准库:一些最爱——re

    标准库:一些最爱 re re模块包括对正則表達式的支持,由于以前系统学习过正則表達式,所以基础内容略过,直接看python对于正則表達式的支持. 正則表達式的学习,见<Mastering Reg ...

  2. python基础课程_学习笔记13:标准库:有些收藏夹——sys

    标准库:有些收藏夹 sys sys这个模块可以让你访问和python解释器联系紧密的变量和函数. sys模块中一些重要的函数和变量 函数/变量 描写叙述 argv 命令行參数,包含脚本名称 exit( ...

  3. Python学习笔记: Python 标准库概览二

    本文来自:入门指南 开胃菜参考:开胃菜 使用Python解释器:使用Python解释器 本文对Python的简介:Python 简介 Python流程介绍:深入Python 流程 Python数据结构 ...

  4. Python学习笔记: Python 标准库概览

    本文来自:入门指南 开胃菜参考:开胃菜 使用Python解释器:使用Python解释器 本文对Python的简介:Python 简介 Python流程介绍:深入Python 流程 Python数据结构 ...

  5. 华为帐号服务学习笔记(四):Authorization Code模式服务端开发

    笔者在<华为帐号服务学习笔记(二):OAuth2.0协议详解>中已经给大家介绍了Authorization Code模式是需要有后台服务器才能使用的,并且在<华为帐号服务学习笔记(三 ...

  6. Python学习笔记17:标准库之数学相关(math包,random包)

    前面几节看得真心累.如今先来点简单easy理解的内容. 一 math包 math包主要处理数学相关的运算. 常数 math.e   # 自然常数e math.pi  # 圆周率pi 运算函数 math ...

  7. Python学习笔记14:标准库之信号量(signal包)

    signal包负责在Python程序内部处理信号.典型的操作包含预设信号处理函数,暂停并等待信号,以及定时发出SIGALRM等. 要注意,signal包主要是针对UNIX平台(比方Linux, MAC ...

  8. 学习笔记(08):Python网络编程并发编程-实现服务端可以对多个客户端提供服务

    立即学习:https://edu.csdn.net/course/play/24458/296237?utm_source=blogtoedu 链接循环,一个服务器服务多个客户端, 思路1:服务器一个 ...

  9. Javaweb学习笔记(JSP标准标签库)

    Javaweb学习笔记(JSP标准标签库) JSTL入门 安装和测试JSTL JSTL中的Core标签库 < c:out>标签 标签 标签 < c:catch>标签 标签 标签 ...

最新文章

  1. 使用HtmlGenericControl控件动态产生一些HtmlControls
  2. MySQL 高级 - 存储过程 - 语法 - if判断 || 传递参数 (IN - 输入 OUT-输出)
  3. 2020-10-30(APK-逆向2)
  4. 学习网站分享 - 菜鸟教程
  5. c++: internal compiler error: Killed
  6. mysql修改字段结构_MySQL修改表结构及其添加删除修改字段功能
  7. Xcode连接git@osc
  8. PHP安装教程及相关说明
  9. datax因为脏数据降速问题解决
  10. IAR 8.50.9破解后,遇到IarIdePm Encoutered an improper argument错误记录
  11. 电气线材选型入门(rv、rvv、rvvp、avvr、蓝白排线等)
  12. 卫星导航信号结构变化的过去,现在和未来
  13. C# DataGridView 冻结列或行
  14. 【科技素养题】少儿编程 蓝桥杯青少组科技素养题真题及解析第16套
  15. 查看CAD图纸文件时如何平移查看?
  16. 微信语音怎么保存 微信语音导出文件夹教程
  17. Linux运维基础进阶——PPT汇总
  18. 最小割与最大流(mincut maxflow)
  19. 软件智能的大致呈现---aaas系统预期
  20. 家庭网络文件共享的几种方式

热门文章

  1. 十大算法,描述+代码+演示+分析+改进(赶紧收藏!)
  2. 2022-2028年中国铪行业市场研究及前瞻分析报告
  3. Jquery DIV滚动至浏览器顶部后固定不动代码
  4. Ubuntu 16.04 安装 PyInstaller
  5. debian10 简单的bash脚本监控apache运行状态
  6. SpringCloud Alibaba微服务实战(五) - Sentinel实现限流熔断
  7. Hexo集成Valine实现评论留言
  8. 深度树匹配模型(TDM)
  9. n个素数构成等差数列
  10. Odoo进销存业务学习笔记