Go语言_HTTP包

简介:

在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))
}
1
  
除了使用这三个函数来建立一个简单客户端,还可以使用:

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)
     }
}

clip_image001

 

如何创建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做服务器的。

目录
相关文章
|
6月前
|
存储 JSON Go
Golang 语言 gRPC 服务怎么同时支持 gRPC 和 HTTP 客户端调用?
Golang 语言 gRPC 服务怎么同时支持 gRPC 和 HTTP 客户端调用?
76 0
|
22天前
|
Go
go语言的http post推送
go语言的http post推送
10 1
|
1月前
|
JSON 编解码 Go
Golang中http编程
Golang中http编程
26 2
|
1月前
|
JSON Go API
Go语言网络编程:HTTP客户端开发实战
【2月更文挑战第12天】本文将深入探讨使用Go语言开发HTTP客户端的技术细节,包括发送GET和POST请求、处理响应、错误处理、设置请求头、使用Cookie等方面。通过实例演示和代码解析,帮助读者掌握构建高效、可靠的HTTP客户端的关键技术。
|
1月前
|
JSON 缓存 中间件
Go语言网络编程:深入探索HTTP服务器开发
【2月更文挑战第12天】本文将详细探讨使用Go语言开发HTTP服务器的过程,包括HTTP协议的理解、Go标准库中`net/http`包的使用、路由处理、中间件、静态文件服务、JSON处理以及性能优化等方面。通过本文,读者将能够掌握构建高效、可扩展HTTP服务器的关键技术。
|
6月前
|
Go
Golang 语言怎么使用 net/http 标准库开发 http 应用?
Golang 语言怎么使用 net/http 标准库开发 http 应用?
26 0
|
4月前
|
网络协议 应用服务中间件 Go
go语言中的socket和http
go语言中的socket和http
34 0
|
6月前
|
JSON JavaScript 测试技术
Golang 语言极简 HTTP 客户端 GoRequest
Golang 语言极简 HTTP 客户端 GoRequest
50 0
|
6月前
|
JSON Go 开发工具
Go语言学习 - RPC篇:理解标准库HTTP的hander实现逻辑
在Go语言中,常见的RPC包括HTTP/gRPC/Thrift等,但绝大多数的开发场景仍是基于HTTP。本文对RPC的讨论,主要是基于HTTP的场景。
40 0
|
Java Linux Go
知识分享之Golang——分享http包中常用的响应常量文件
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。 知识分享系列目前包含Java、Golang、Linux、Docker等等。
129 0
知识分享之Golang——分享http包中常用的响应常量文件