go是一門簡潔強大的語言,簡單體驗之後覺得對於網路和命令列的支援也非常棒,本文介紹一下go實現靜態伺服器的大致流程。
最近接手了gobyexample的翻譯工作,將專案重構後需要本地的測試環境。
由於想要頁面的url顯示為「」這種結尾不帶「/」的形式,子頁面沒有帶上html,並且有資源因此需要乙個static server。
根據golang wiki,實現這個簡單server只需要...一行**:
func main()加入log後稍微改寫一下,放在我們專案的tools目錄下:
}再來乙個可執行的tools/serve
檔案
#!/bin/bash
exec go run tools/serve.go
ok現在只需要tools/serve
就可以啟動這個伺服器了。
一切看起來很正常,但如果我們訪問一下不存在的某個頁面,404.html並不會被serve,這是因為go提供的fileserver
並不知道我們自定義的404頁面。
所以我們需要將http.fileserver
改為乙個自定義的handler
。
寫go的時候體驗特別好的一點就是go官方團隊提供了很opinionated的convention,比如go-get,go-fmt等。
在我們輸入http.fileserver
時會自動在imports
中新增相應的庫,跳轉到原始碼後看到了這個函式的實現:
}於是我們知道了這裡的函式需要返回的handler有乙個servehttp
方法。但是這裡的servefile
並不能直接由http.servefile
呼叫:go規定乙個package內小寫字母開頭的均為私有,不能被外部package訪問。
但是沒有關係,我們可以在filehandler
上再包裝一層**,在執行完我們判斷檔案存在的邏輯後執行原先所有filehandler.servehttp
的內容,修改後的**如下:
}在傳入filesystem
的時候傳入指標也避免建立,很有c的感覺。
基本功能都已經實現,但作為乙個命令列工具,希望再進行一些完善。
首先我們需要支援傳參,go對於命令列引數的支援非常棒,只要引入builtin的flag包之後,我們加入
port := flag.string("port", ":8080", "localhost port to serve")
path := flag.string("path", "public", "public files path")
flag.parse()
就可以得到*string
型別的命令列引數,並且天生支援預設值和描述,測試一下go run tools/serve.go -h
,可以得到:
usage of /var/folders/sd/cwk5fwtd4ms5vflhq5_0_5rr0000gn/t/go-build178666598/command-line-arguments/_obj/exe/serve:
-path string
public files path (default "public")
-port string
localhost port to serve (default ":8080")
準備serve檔案之前,再輸出一下帶有格式的資訊加粗一下我們傳入的引數:
log.printf("serving \x1b[1m%s\x1b[0m at: http://localhost\x1b[1m%s\x1b[0m\n", *path, *port)
這裡\x1b[0m
代表「all attributes off(color at startup)」,\x1b[1m
代表「bold on(enable foreground intensity)」。
go作為靜態語言擁有可以與動態語言媲美的靈活性,有完整易用的工具鏈和豐富的標準庫,是2023年增長最快的語言,簡單的同時非常強大。
希望有更多的人可以一起學習go,我正在完善go by example的翻譯,歡迎閱讀以及貢獻pr!
閱讀原文
Linux 搭建靜態頁面
很多時候由於測試需要,經常搭建測試 下面是個人寫的簡易shell 指令碼,快速搭建靜態頁面,跟搭建分享下 bin bash echo 正在安裝檢測環境!耐心等待 echo 請檢查dns配置 exit 1 fiyum y install curl dev null 安裝curl yum y insta...
Go實現頁面靜態化
tmpl,err template.parsefiles hello.tmpl product,err p.productservice.getproductbyid int64 productid file,err os.openfile filename,os.o create os.o wro...
靜態頁面 動態頁面和偽靜態頁面的區別
1.靜態頁面 優點 相對於其他兩種頁面 動態頁面和偽靜態頁面 速度最快,而且不需要從資料庫裡面提取資料,速度快的同時,也不會對伺服器產生壓力。缺點 由於資料都是儲存在html裡面,所以導致檔案非常大。並且最嚴重的問題是,更改源 必須全部更改,而不能改乙個地方,全站靜態頁面就自動更改了。如果是大型 有...