在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)
}
}
|
如何创建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做服务器的。
本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/archive/2012/06/18/2554066.html,如需转载请自行联系原作者