天天看點

Go語言_HTTP包http用戶端如何建立web服務端?golang伺服器的效率怎樣呢?

在golang中寫一個http web伺服器大緻是有兩種方法:

1 使用net包的net.listen來對端口進行監聽

2 使用net/http包

這裡是讨論如何使用net/http包建立一個web伺服器

net/http請求提供了http用戶端和服務端的具體實作

先看到的是get,post,postform三個函數。這三個函數直接實作了http用戶端

1

2

3

4

5

6

7

8

9

10

11

12

<code>import (</code>

<code>    </code><code>"fmt"</code>

<code>    </code><code>"net/http"</code>

<code>    </code><code>"io/ioutil"</code>

<code>)</code>

<code>func main() {</code>

<code>    </code><code>defer response.body.close()</code>

<code>    </code><code>body,_ := ioutil.readall(response.body)</code>

<code>    </code><code>fmt.println(</code><code>string</code><code>(body))</code>

<code>}</code>

<code> </code> 

除了使用這三個函數來建立一個簡單用戶端,還可以使用:

http.client和http.newrequest來模拟請求

13

14

15

16

17

18

19

20

21

22

23

24

25

26

<code>package main</code>

<code>    </code><code>client := &amp;http.client{}</code>

<code>    </code> 

<code>    </code><code>reqest.header.set(</code><code>"accept"</code><code>,</code><code>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"</code><code>)</code>

<code>    </code><code>reqest.header.set(</code><code>"accept-charset"</code><code>,</code><code>"gbk,utf-8;q=0.7,*;q=0.3"</code><code>)</code>

<code>    </code><code>reqest.header.set(</code><code>"accept-encoding"</code><code>,</code><code>"gzip,deflate,sdch"</code><code>)</code>

<code>    </code><code>reqest.header.set(</code><code>"accept-language"</code><code>,</code><code>"zh-cn,zh;q=0.8"</code><code>)</code>

<code>    </code><code>reqest.header.set(</code><code>"cache-control"</code><code>,</code><code>"max-age=0"</code><code>)</code>

<code>    </code><code>reqest.header.set(</code><code>"connection"</code><code>,</code><code>"keep-alive"</code><code>)</code>

<code>    </code><code>response,_ := client.do(reqest)</code>

<code>    </code><code>if</code> <code>response.statuscode == 200 {</code>

<code>        </code><code>body, _ := ioutil.readall(response.body)</code>

<code>        </code><code>bodystr := </code><code>string</code><code>(body);</code>

<code>        </code><code>fmt.println(bodystr)</code>

<code>    </code><code>}</code>

Go語言_HTTP包http用戶端如何建立web服務端?golang伺服器的效率怎樣呢?

http包封裝地非常bt,隻需要兩行!!:

<code>func sayhello(w http.responsewriter, req *http.request) {</code>

<code>    </code><code>w.write([]</code><code>byte</code><code>(</code><code>"hello"</code><code>))</code>

<code>    </code><code>http.handlefunc(</code><code>"/hello"</code><code>, sayhello)</code>

<code>    </code><code>http.listenandserve(</code><code>":8001"</code><code>, nil)</code>

進行端口的監聽:http.listenandserve(":8001", nil)

注冊路徑處理函數:http.handlefunc("/hello", sayhello)

處理函數:func sayhello(w http.responsewriter, req *http.request)

看看這個文章:

<a href="http://groups.google.com/group/golang-nuts/browse_thread/thread/cde2cc6278cefc90">http://groups.google.com/group/golang-nuts/browse_thread/thread/cde2cc6278cefc90</a>

node.js is 45% faster than golang(确實傷心)

golang服務端的效率确實沒有node.js高,幾乎是它的一半。但話說回來,如果一些并發量不是很大的site,還是可以使用golang做伺服器的。

繼續閱讀