golang文件服務(wù)器的兩種方式(可以訪問(wèn)任何目錄)
一、方法1:
主要用到的方法是http包的FileServer,參數(shù)很簡(jiǎn)單,就是要路由的文件夾的路徑。
package main import ( "fmt" "net/http" ) func main() { http.Handle("/", http.FileServer(http.Dir("./"))) e := http.ListenAndServe(":8080", nil) fmt.Println(e) }
上面例子的路由只能把根目錄也就是“/”目錄映射出來(lái),例如你寫成”http.Handle("/files", http.FileServer(http.Dir("./")))“,就無(wú)法把通過(guò)訪問(wèn)”/files“把當(dāng)前路徑下的文件映射出來(lái)。于是就有了http包的StripPrefix方法。
二、方法2:
實(shí)現(xiàn)訪問(wèn)任意文件夾下面的文件。
package main import ( "fmt" "net/http" ) func main() { mux := http.NewServeMux() mux.Handle("/", http.StripPrefix("/", http.FileServer(http.Dir("/")))) mux.Handle("/c/", http.StripPrefix("/c/", http.FileServer(http.Dir("c:")))) mux.Handle("/d/", http.StripPrefix("/d/", http.FileServer(http.Dir("d:")))) mux.Handle("/e/", http.StripPrefix("/e/", http.FileServer(http.Dir("e:")))) if err := http.ListenAndServe(":3008", mux); err != nil { log.Fatal(err) } }
這里生成了一個(gè)ServeMux,與文件服務(wù)器無(wú)關(guān),可以先不用關(guān)注。用這種方式,就可以把任意文件夾下的文件路由出來(lái)了。
ps:golang實(shí)現(xiàn)的文件服務(wù)器
最近在學(xué)習(xí)golang,使用golang實(shí)現(xiàn)了一個(gè)最簡(jiǎn)單的文件服務(wù)器,程序只有簡(jiǎn)單的十多行代碼,可以編譯成windows, linux, mac多平臺(tái)可執(zhí)行文件。
源碼
package main import ( "fmt" "net/http" "os" "path/filepath" ) func main() { p, _ := filepath.Abs(filepath.Dir(os.Args[0])) http.Handle("/", http.FileServer(http.Dir(p))) err := http.ListenAndServe(":8088", nil) if err != nil { fmt.Println(err) } }
源碼解釋
os.Args[0]獲取的是執(zhí)行程序時(shí)的第一個(gè)參數(shù),默認(rèn)第一個(gè)參數(shù)是程序所在的目錄
filepath.Abs(filepath.Dir(os.Args[0]))是獲取當(dāng)前可執(zhí)行程序所在的絕對(duì)路徑
http.Handle("/", http.FileServer(http.Dir(p)))是開(kāi)啟一個(gè)文件服務(wù)器,使用當(dāng)前可執(zhí)行文件所在的路徑
http.ListenAndServe(":8088", nil)是監(jiān)聽(tīng)8088端口并開(kāi)啟文件服務(wù)器
編譯
要將源碼編譯成不同平臺(tái)的可執(zhí)行文件,需要使用gox工具,使用下面的命令安裝gox:
go get github.com/mitchellh/gox
執(zhí)行成功之后,使用gox命令即可自動(dòng)編譯出各個(gè)平臺(tái)的可執(zhí)行文件,如果想為某個(gè)平臺(tái)單獨(dú)編譯,可以使用如下方式:
gox -os "windows linux" -arch amd64
-os參數(shù)指定了編譯平臺(tái),-arch參數(shù)指定了處理器架構(gòu)
運(yùn)行
直接打開(kāi)編譯出來(lái)的可執(zhí)行程序,即可運(yùn)行,在瀏覽器中訪問(wèn)http://ip:8088即可看到可執(zhí)行文件所在的目錄下的所有文件。
到此這篇關(guān)于golang文件服務(wù)器可以訪問(wèn)任何目錄的文章就介紹到這了,更多相關(guān)golang文件服務(wù)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
GoLang BoltDB數(shù)據(jù)庫(kù)詳解
這篇文章主要介紹了GoLang BoltDB數(shù)據(jù)庫(kù),boltdb是使用Go語(yǔ)言編寫的開(kāi)源的鍵值對(duì)數(shù)據(jù)庫(kù),boltdb存儲(chǔ)數(shù)據(jù)時(shí) key和value都要求是字節(jié)數(shù)據(jù),此處需要使用到 序列化和反序列化2023-02-02談?wù)揋o 什么時(shí)候會(huì)觸發(fā) GC問(wèn)題
Go 語(yǔ)言作為一門新語(yǔ)言,在早期經(jīng)常遭到唾棄的就是在垃圾回收(下稱:GC)機(jī)制中 STW(Stop-The-World)的時(shí)間過(guò)長(zhǎng)。下面文章就對(duì)此話題展開(kāi),感興趣的小伙伴可以參考下面文章的內(nèi)容2021-09-09Golang線上內(nèi)存爆掉問(wèn)題排查(pprof)與解決
這篇文章主要介紹了Golang線上內(nèi)存爆掉問(wèn)題排查(pprof)與解決,涉及到數(shù)據(jù)敏感,文中代碼是我模擬線上故障的一個(gè)情況,好在我們程序都有添加pprof監(jiān)控,于是直接通過(guò)go tool pprof分析,需要的朋友可以參考下2024-04-04golang實(shí)現(xiàn)數(shù)組分割的示例代碼
本文主要介紹了golang實(shí)現(xiàn)數(shù)組分割的示例代碼,要求把數(shù)組分割成多個(gè)正整數(shù)大小的數(shù)組,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12