Go语言_HTTP包
2012-06-18 22:00 轩脉刃 阅读(54335) 评论(2) 编辑 收藏 举报在Golang中写一个http web服务器大致是有两种方法:
1 使用net包的net.Listen来对端口进行监听
2 使用net/http包
这里是讨论如何使用net/http包创建一个web服务器
net/http请求提供了HTTP客户端和服务端的具体实现
http客户端
先看到的是Get,Post,PostForm三个函数。这三个函数直接实现了http客户端
1 2 3 4 5 6 7 8 9 10 11 12 | import ( "fmt" "net/http" "io/ioutil" ) func main() { response,_ := http.Get( "http://www.baidu.com" ) defer response.Body.Close() body,_ := ioutil.ReadAll(response.Body) fmt.Println( string (body)) } |
http.Client和http.NewRequest来模拟请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | package main import ( "net/http" "io/ioutil" "fmt" ) func main() { client := &http.Client{} reqest, _ := http.NewRequest( "GET" , "http://www.baidu.com" , nil) reqest.Header.Set( "Accept" , "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" ) reqest.Header.Set( "Accept-Charset" , "GBK,utf-8;q=0.7,*;q=0.3" ) reqest.Header.Set( "Accept-Encoding" , "gzip,deflate,sdch" ) reqest.Header.Set( "Accept-Language" , "zh-CN,zh;q=0.8" ) reqest.Header.Set( "Cache-Control" , "max-age=0" ) reqest.Header.Set( "Connection" , "keep-alive" ) response,_ := client.Do(reqest) if response.StatusCode == 200 { body, _ := ioutil.ReadAll(response.Body) bodystr := string (body); fmt.Println(bodystr) } } |
如何创建web服务端?
http包封装地非常bt,只需要两行!!:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | package main import ( "net/http" ) func SayHello(w http.ResponseWriter, req *http.Request) { w.Write([] byte ( "Hello" )) } func main() { http.HandleFunc( "/hello" , SayHello) http.ListenAndServe( ":8001" , nil) } |
进行端口的监听:http.ListenAndServe(":8001", nil)
注册路径处理函数:http.HandleFunc("/hello", SayHello)
处理函数:func SayHello(w http.ResponseWriter, req *http.Request)
golang服务器的效率怎样呢?
看看这个帖子:
http://groups.google.com/group/golang-nuts/browse_thread/thread/cde2cc6278cefc90
node.js is 45% faster than golang(确实伤心)
golang服务端的效率确实没有node.js高,几乎是它的一半。但话说回来,如果一些并发量不是很大的site,还是可以使用golang做服务器的。
实时了解作者更多技术文章,技术心得,请关注微信公众号“轩脉刃的刀光剑影”
本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,但是必须保留本文的署名叶剑峰(包含链接http://www.cnblogs.com/yjf512/),且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下