Go語(yǔ)言使用HTTP包創(chuàng)建WEB服務(wù)器的方法
本文實(shí)例講述了Go語(yǔ)言使用HTTP包創(chuàng)建WEB服務(wù)器的方法。分享給大家供大家參考,具體如下:
在Golang中寫(xiě)一個(gè)http web服務(wù)器大致是有兩種方法:
1 使用net包的net.Listen來(lái)對(duì)端口進(jìn)行監(jiān)聽(tīng)
2 使用net/http包
這里是討論如何使用net/http包創(chuàng)建一個(gè)web服務(wù)器
net/http請(qǐng)求提供了HTTP客戶端和服務(wù)端的具體實(shí)現(xiàn)
http客戶端
先看到的是Get,Post,PostForm三個(gè)函數(shù)。這三個(gè)函數(shù)直接實(shí)現(xiàn)了http客戶端
"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))
}
除了使用這三個(gè)函數(shù)來(lái)建立一個(gè)簡(jiǎn)單客戶端,還可以使用:
http.Client和http.NewRequest來(lái)模擬請(qǐng)求
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)
}
}

如何創(chuàng)建web服務(wù)端?
http包封裝地非常bt,只需要兩行!!:
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)
}
進(jìn)行端口的監(jiān)聽(tīng):http.ListenAndServe(":8001", nil)
注冊(cè)路徑處理函數(shù):http.HandleFunc("/hello", SayHello)
處理函數(shù):func SayHello(w http.ResponseWriter, req *http.Request)
golang服務(wù)器的效率怎樣呢?
看看這個(gè)帖子:
http://groups.google.com/group/golang-nuts/browse_thread/thread/cde2cc6278cefc90
node.js is 45% faster than golang(確實(shí)傷心)
golang服務(wù)端的效率確實(shí)沒(méi)有node.js高,幾乎是它的一半。但話說(shuō)回來(lái),如果一些并發(fā)量不是很大的site,還是可以使用golang做服務(wù)器的。
希望本文所述對(duì)大家Go語(yǔ)言程序設(shè)計(jì)有所幫助。
- go語(yǔ)言在請(qǐng)求http時(shí)加入自定義http header的方法
- Go語(yǔ)言通過(guò)http抓取網(wǎng)頁(yè)的方法
- GO語(yǔ)言實(shí)現(xiàn)的http抓包分析工具pproxy介紹
- go語(yǔ)言實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的http文件服務(wù)器實(shí)例
- Go語(yǔ)言HTTP請(qǐng)求流式寫(xiě)入body的示例代碼
- go語(yǔ)言簡(jiǎn)單的處理http請(qǐng)求的函數(shù)實(shí)例
- go語(yǔ)言中http超時(shí)引發(fā)的事故解決
- go語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單http服務(wù)的方法
- Go語(yǔ)言HTTP服務(wù)器高級(jí)配置與優(yōu)化
相關(guān)文章
golang實(shí)現(xiàn)unicode轉(zhuǎn)換為字符串string的方法
這篇文章主要介紹了golang實(shí)現(xiàn)unicode轉(zhuǎn)換為字符串string的方法,實(shí)例分析了Go語(yǔ)言編碼轉(zhuǎn)換的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07
Golang 錯(cuò)誤捕獲Panic與Recover的使用
對(duì)于Go語(yǔ)言的錯(cuò)誤是通過(guò)返回值的方式,本文主要介紹了Golang 錯(cuò)誤捕獲Panic與Recover的使用,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
快速掌握Go 語(yǔ)言 HTTP 標(biāo)準(zhǔn)庫(kù)的實(shí)現(xiàn)方法
基于HTTP構(gòu)建的服務(wù)標(biāo)準(zhǔn)模型包括兩個(gè)端,客戶端(Client)和服務(wù)端(Server),這篇文章主要介紹了Go 語(yǔ)言HTTP標(biāo)準(zhǔn)庫(kù)的實(shí)現(xiàn)方法,需要的朋友可以參考下2022-07-07
Golang設(shè)計(jì)模式之外觀模式講解和代碼示例
外觀是一種結(jié)構(gòu)型設(shè)計(jì)模式, 能為復(fù)雜系統(tǒng)、 程序庫(kù)或框架提供一個(gè)簡(jiǎn)單 (但有限) 的接口,這篇文章就給大家詳細(xì)介紹一下Golang的外觀模式,文中有詳細(xì)的代碼示例,具有一定的參考價(jià)值,需要的朋友可以參考下2023-06-06
Go語(yǔ)言使用Timeout Context取消任務(wù)的實(shí)現(xiàn)
本文主要介紹了Go語(yǔ)言使用Timeout Context取消任務(wù)的實(shí)現(xiàn),包括基本的任務(wù)取消和控制HTTP客戶端請(qǐng)求的超時(shí),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
Golang環(huán)境變量設(shè)置和查看工具go env詳解
go env 是 Go 工具鏈中的一個(gè)命令,用于設(shè)置和查看當(dāng)前 Golang 環(huán)境的相關(guān)信息,對(duì)于理解、編譯和運(yùn)行 Golang 程序非常有用,本文就給大家簡(jiǎn)單的介紹一下Golang環(huán)境變量設(shè)置和查看工具go env,需要的朋友可以參考下2023-07-07
Golang使用Gin框架實(shí)現(xiàn)HTTP響應(yīng)格式統(tǒng)一處理
在gin框架中,我們可以定義一個(gè)中間件來(lái)處理統(tǒng)一的HTTP響應(yīng)格式,本文主要為大家介紹了具體是怎么定義實(shí)現(xiàn)這樣的中間件的,感興趣的小伙伴可以了解一下2023-07-07
Go語(yǔ)言部署Kubernetes的實(shí)現(xiàn)示例
本文介紹了將Go應(yīng)用部署到Kubernetes的全過(guò)程,實(shí)現(xiàn)自動(dòng)擴(kuò)展、滾動(dòng)更新、健康檢查、監(jiān)控,并提供了最佳實(shí)踐和完整示例,具有一定的參考價(jià)值,感興趣的可以了解一下2026-05-05

