Go語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的一個(gè)靜態(tài)WEB服務(wù)器
學(xué)習(xí)Go語(yǔ)言的一些感受,不一定準(zhǔn)確。
假如發(fā)生戰(zhàn)爭(zhēng),JAVA一般都是充當(dāng)航母戰(zhàn)斗群的角色。
一旦出動(dòng),就是護(hù)衛(wèi)艦、巡洋艦、航母艦載機(jī)、預(yù)警機(jī)、電子戰(zhàn)飛機(jī)、潛艇等等
浩浩蕩蕩,殺將過(guò)去。
(JVM,數(shù)十個(gè)JAR包,Tomcat中間件,SSH框架,各種配置文件...天生就是重量級(jí)的,專為大規(guī)模作戰(zhàn))
而GO語(yǔ)言更像F35戰(zhàn)斗轟炸機(jī)
單槍匹馬,悄無(wú)聲息,投下炸彈然后走人。
專屬轟炸機(jī),空戰(zhàn)也會(huì)一點(diǎn)點(diǎn).
實(shí)在搞不定,就叫它大哥F22。
(GO是編譯型語(yǔ)言,不需要依賴,不需要虛擬機(jī),可以調(diào)用C代碼并且它足夠簡(jiǎn)單,卻非常全面)
計(jì)劃Go語(yǔ)言學(xué)習(xí)的知識(shí)點(diǎn)
1.搭建Http服務(wù)
2.連接數(shù)據(jù)庫(kù)
3.本地IO
4.多線程
5.網(wǎng)絡(luò)
6.調(diào)用本地命令
7.調(diào)用C語(yǔ)言代碼
首先,搭建一個(gè)靜態(tài)的服務(wù)器
我寫(xiě)程序喜歡使用HTML通過(guò)AJAX發(fā)送JSON請(qǐng)求到后端處理。
HttpServer.go
package main
import (
"flag"
"io/ioutil"
"log"
"net/http"
"os"
"strings"
)
var realPath *string
func staticResource(w http.ResponseWriter, r *http.Request) {
path := r.URL.Path
request_type := path[strings.LastIndex(path, "."):]
switch request_type {
case ".css":
w.Header().Set("content-type", "text/css")
case ".js":
w.Header().Set("content-type", "text/javascript")
default:
}
fin, err := os.Open(*realPath + path)
defer fin.Close()
if err != nil {
log.Fatal("static resource:", err)
}
fd, _ := ioutil.ReadAll(fin)
w.Write(fd)
}
func main() {
realPath = flag.String("path", "", "static resource path")
flag.Parse()
http.HandleFunc("/", staticResource)
err := http.ListenAndServe(":8080", nil)
if err != nil {
log.Fatal("ListenAndServe:", err)
}
}
網(wǎng)上看到一個(gè)更BT的方法:
package main
import (
"net/http"
)
func main() {
http.Handle("/", http.FileServer(http.Dir("/tmp/static/")))
http.ListenAndServe(":8080", nil)
}
將EasyUI前端框架解壓到 /tmp/static 目錄下:
在GOPATH下執(zhí)行
go run HttpServer.go --path=/tmp/static
查看網(wǎng)頁(yè),一切正常。
這樣Go語(yǔ)言以不到50行代碼,編譯之后不到7M的可執(zhí)行文件,就實(shí)現(xiàn)了一個(gè)簡(jiǎn)易的靜態(tài)服務(wù)器。
相關(guān)文章
Golang?IOT中的數(shù)據(jù)序列化與解析過(guò)程
這篇文章主要介紹了Golang?IOT中的數(shù)據(jù)序列化與解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05golang基于errgroup實(shí)現(xiàn)并發(fā)調(diào)用的方法
這篇文章主要介紹了golang基于errgroup實(shí)現(xiàn)并發(fā)調(diào)用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09Golang信號(hào)處理及如何實(shí)現(xiàn)進(jìn)程的優(yōu)雅退出詳解
這篇文章主要給大家介紹了關(guān)于Golang信號(hào)處理及如何實(shí)現(xiàn)進(jìn)程的優(yōu)雅退出的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03Go 語(yǔ)言json.Unmarshal 遇到的小問(wèn)題(推薦)
這篇文章主要介紹了 Go 語(yǔ)言json.Unmarshal 遇到的小問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07golang 函數(shù)以及函數(shù)和方法的詳解及區(qū)別
這篇文章主要介紹了golang 函數(shù)以及函數(shù)和方法的區(qū)別的相關(guān)資料,需要的朋友可以參考下2017-05-05一文帶你了解Go語(yǔ)言fmt標(biāo)準(zhǔn)庫(kù)輸出函數(shù)的使用
這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言中 fmt 標(biāo)準(zhǔn)庫(kù)輸出函數(shù)的使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12Go語(yǔ)言學(xué)習(xí)之結(jié)構(gòu)體和方法使用詳解
這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言中結(jié)構(gòu)體和方法的使用,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Go語(yǔ)言有一定的幫助,需要的可以參考一下2022-04-04