Go语言学习#12-如何搭建HTTP服务

=Start=

缘由:

学习整理一下如何用Go 语言实现简单的HTTP服务,以便后续参考和使用。

正文:

参考解答:
1、一个超简单的HTTP服务样例

保存为 go_http.go 然后用命令 go run go_http.go启动HTTP服务。

2、提供静态文件Web服务

3、读取HTTP的header/form/body内容的样例

主要起演示作用,如果想知道更多http.Request和http.ResponseWriter有哪些字段,可以达到什么功能,可以去godoc里面看,非常方便和简单。

&

 

参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/4153.html

《Go语言学习#12-如何搭建HTTP服务》上有1条评论

  1. 【Go】优雅的读取http请求或响应的数据
    https://blog.thinkeridea.com/201901/go/you_ya_de_du_qu_http_qing_qiu_huo_xiang_ying_de_shu_ju.html

    背景介绍
    我们有许多 api 服务,全部采用 json 数据格式,请求体就是整个 json 字符串,当一个请求到服务端会经过一些业务处理,然后再请求后面更多的服务,所有的服务之间都用 http 协议来通信(啊, 为啥不用 RPC,因为所有的服务都会对第三方开放,http + json 更好对接),大多数请求数据大小在 1K~4K,响应的数据在 1K~8K,早期所有的服务都使用 ioutil.ReadAll 来读取数据,随着流量增加使用 pprof 来分析发现 bytes.makeSlice 总是排在第一,并且占用了整个程序 1/10 的内存分配,我决定针对这个问题进行优化,下面是整个优化过程的记录。

    使用合适大小的 buffer 来减少内存分配,sync.Pool 可以帮助复用 buffer, 一定要自己写这些逻辑,避免使用三方包,三方包即使使用同样的技巧为了避免数据争用,在返回数据时候必然会拷贝一个新的数据返回,就像 jsoniter 虽然使用了 sync.Pool 和 buffer 但是返回数据时还需要拷贝,另外这种通用包并不能给一个非常贴合业务的初始 buffer 大小,过小会导致数据发生拷贝,过大会太过浪费内存。

    程序中善用 buffer 和 sync.Pool 可以大大的改善程序的性能,并且这两个组合在一起使用非常的简单,并不会使代码变的复杂。

发表评论

电子邮件地址不会被公开。 必填项已用*标注