基于Go語(yǔ)言搭建靜態(tài)文件服務(wù)器的詳細(xì)教程
1、簡(jiǎn)介
Go語(yǔ)言誕生于2007年9月20日。
Go 是一個(gè)開(kāi)源的編程語(yǔ)言,它能讓構(gòu)造簡(jiǎn)單、可靠且高效的軟件變得容易。
Go是從2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持開(kāi)發(fā),后來(lái)還加入了Ian Lance Taylor, Russ Cox等人,并最終于2009年11月開(kāi)源,在2012年早些時(shí)候發(fā)布了Go 1穩(wěn)定版本?,F(xiàn)在Go的開(kāi)發(fā)已經(jīng)是完全開(kāi)放的,并且擁有一個(gè)活躍的社區(qū)。
語(yǔ)法簡(jiǎn)單 Go語(yǔ)言在自由度和靈活度上做了取舍,以此換來(lái)了更好的維護(hù)性和平滑的學(xué)習(xí)曲線。
部署友好 Go靜態(tài)編譯后的二進(jìn)制文件不依賴額外的運(yùn)行環(huán)境,編譯速度也非常快。
交叉編譯 Go僅需要在編譯時(shí)簡(jiǎn)單設(shè)置兩個(gè)參數(shù),就可以編譯出能在其它平臺(tái)上運(yùn)行的程序
天然并發(fā) Go語(yǔ)言對(duì)于并發(fā)的支持是純天然的,僅需一個(gè)關(guān)鍵字,就可以開(kāi)啟一個(gè)異步協(xié)程。
垃圾回收 Go有著優(yōu)秀的GC性能,大部分情況下GC延時(shí)都不會(huì)超過(guò)1毫秒。
豐富的標(biāo)準(zhǔn)庫(kù) 從字符串處理到源碼AST解析,功能強(qiáng)大且豐富的標(biāo)準(zhǔn)庫(kù)是Go語(yǔ)言堅(jiān)實(shí)的基礎(chǔ)。
完善的工具鏈 Go有著完善的開(kāi)發(fā)工具鏈,涵蓋了編譯,測(cè)試,依賴管理,性能分析等方方面面。
2、安裝
2.1 安裝版
2.2 壓縮版
配置環(huán)境變量:
GOPATH=E:\Test\go_project GOROOT=E:\Test\go1.23.2.windows-amd64\go PATH += E:\Test\go1.23.2.windows-amd64\go\bin
測(cè)試是否配置成功:
go version
3、基本操作
3.1 go run
編譯完成并馬上運(yùn)行 Go 程序。go run 只支持屬于 main 包的一個(gè)或多個(gè)文件作為參數(shù),不然是不能進(jìn)行編譯的。
go run main.go # or go run -n main.go
3.2 go build
編譯指定的源文件、軟件包和其他依賴,但是不會(huì)在編譯后執(zhí)行二進(jìn)制文件。
go build 和 go run 在編譯過(guò)程中其實(shí)是差不多的,不同之處是 go build 會(huì)生成編譯好二進(jìn)制文件并刪掉編譯過(guò)程產(chǎn)生的臨時(shí)目錄。若沒(méi)有-o 指定文件名,則和當(dāng)前目錄名一致。
go build main.go # or go build -x main.go
3.3 go install
編譯并安裝源文件、軟件包,即把編譯后的文件(可執(zhí)行二進(jìn)制文件、歸檔文件等)安裝到指定的目錄中。將編譯后的文件(可執(zhí)行二進(jìn)制文件、歸檔文件等)安裝到指定的目錄中。若設(shè)置了環(huán)境變量 GOBIN ,則把二進(jìn)制可執(zhí)行文件移到該目錄。若禁用 Go modules 則放到 G O P A T H / p k g / GOPATH/pkg/ GOPATH/pkg/GOOS_$GOARCH下。
go install -x main.go
3.4 go env
當(dāng)你安裝的GO的語(yǔ)言版本大于1.13的時(shí)候,直接使用go env -w命令就行了.
go env -w GOPROXY=https://goproxy.io,direct # Set environment variable allow bypassing the proxy for selected modules go env -w GOPRIVATE=*.corp.example.com go env -w GO111MODULE=on
使用go env環(huán)境變量在不同操作系統(tǒng)(Mac、Linux、Windows)之間交叉編譯64位Go應(yīng)用程序。通過(guò)設(shè)置CGO_ENABLED、GOOS和GOARCH,可以在本地構(gòu)建目標(biāo)平臺(tái)的可執(zhí)行文件,簡(jiǎn)化了部署流程,避免了將整個(gè)項(xiàng)目上傳到服務(wù)器的需要。
Windows下編譯Mac, Linux平臺(tái)的64位可執(zhí)行程序:
go env -w CGO_ENABLED=0 GOOS=darwin3 GOARCH=amd64 go env -w CGO_ENABLED=0 GOOS=linux GOARCH=amd64
Linux下編譯Mac, Windows平臺(tái)的64位可執(zhí)行程序:
go env -w CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go env -w CGO_ENABLED=0 GOOS=windows GOARCH=amd64
Mac下編譯Linux, Windows平臺(tái)的64位可執(zhí)行程序:
go env -w CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go env -w CGO_ENABLED=0 GOOS=windows GOARCH=amd64
3.5 go module
go module是go官方自帶的go依賴管理庫(kù),在1.13版本正式推薦使用。默認(rèn)值為空,即go判斷開(kāi)不開(kāi)啟module的依據(jù)是看當(dāng)前項(xiàng)目的根目錄下有沒(méi)有g(shù)o.mod文件,當(dāng)然我們也可手動(dòng)更改為 on(全部開(kāi)啟)/off(全部不開(kāi)啟,不建議):
go env -w GO111MODULE=on go env -w GOPATH=D:\Golang1.19\gopath go env -w GOCACHE=D:\Golang1.19\gopath\go-build-cache
4、文件服務(wù)器
4.1 filebrowser
https://github.com/filebrowser/filebrowser
4.2 gohttpserver
https://github.com/codeskyblue/gohttpserver
輸入如下編譯命令:
go build
生成exe文件如下:
執(zhí)行exe如下:
瀏覽器訪問(wèn)如下:
4.3 goFile
https://github.com/csznet/goFile
go build
生成exe文件如下:
瀏覽器訪問(wèn)如下:
5、FAQ
5.1 go.mod 為空
go: go.mod file not found in current directory or any parent directory. ‘go get’ is no longer supported outside a module.
答:執(zhí)行如下命令即可:
go mod init mod
使用go env查看配置信息:
go env
5.2 超時(shí)
換個(gè)代理即可:
go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct
set GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct # 設(shè)置不走 proxy 的私有倉(cāng)庫(kù),多個(gè)用逗號(hào)相隔 go env -w GOPRIVATE=*.corp.example.com go get -u gorm.io/gorm
結(jié)語(yǔ)
以上就是基于Go語(yǔ)言搭建靜態(tài)文件服務(wù)器的詳細(xì)教程的詳細(xì)內(nèi)容,更多關(guān)于Go搭建靜態(tài)文件服務(wù)器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
golang?基于?mysql?簡(jiǎn)單實(shí)現(xiàn)分布式讀寫鎖
這篇文章主要介紹了golang?基于mysql簡(jiǎn)單實(shí)現(xiàn)分布式讀寫鎖,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09一文教你如何快速學(xué)會(huì)Go的切片和數(shù)組數(shù)據(jù)類型
數(shù)組是屬于同一類型的元素的集合。切片是數(shù)組頂部的方便、靈活且功能強(qiáng)大的包裝器。本文就來(lái)和大家聊聊Go中切片和數(shù)組的使用,需要的可以參考一下2023-03-03Go構(gòu)建器模式構(gòu)建復(fù)雜對(duì)象方法實(shí)例
本文介紹了構(gòu)建器模式,如何通過(guò)構(gòu)建器對(duì)象構(gòu)建復(fù)雜業(yè)務(wù)對(duì)象的方法實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12Go語(yǔ)言中兩個(gè)比較流行的緩存庫(kù)使用示例
緩存是計(jì)算機(jī)科學(xué)中的一個(gè)重要概念,設(shè)想某個(gè)組件需要訪問(wèn)外部資源,它向外部源請(qǐng)求資源,接收并使用資源,這些步驟都需要花費(fèi)時(shí)間,下面這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言中兩個(gè)比較流行的緩存庫(kù)使用的相關(guān)資料,需要的朋友可以參考下2024-04-04Golang在Mac、Linux、Windows下如何交叉編譯的實(shí)現(xiàn)
這篇文章主要介紹了Golang在Mac、Linux、Windows下如何交叉編譯的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03Golang 操作TSV文件的實(shí)戰(zhàn)示例
本文主要介紹了Golang 操作TSV文件的實(shí)戰(zhàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03在?Go?語(yǔ)言中使用?regexp?包處理正則表達(dá)式的操作
正則表達(dá)式是處理字符串時(shí)一個(gè)非常強(qiáng)大的工具,而?Go?語(yǔ)言的?regexp?包提供了簡(jiǎn)單而強(qiáng)大的接口來(lái)使用正則表達(dá)式,本文將介紹如何在?Go?中使用?regexp?包來(lái)編譯和執(zhí)行正則表達(dá)式,以及如何從文本中匹配和提取信息,感興趣的朋友一起看看吧2023-12-12Go json omitempty如何實(shí)現(xiàn)可選屬性
在Go語(yǔ)言中,使用`omitempty`可以幫助我們?cè)谶M(jìn)行JSON序列化和反序列化時(shí),忽略結(jié)構(gòu)體中的零值或空值,本文介紹了如何通過(guò)將字段類型改為指針類型,并在結(jié)構(gòu)體的JSON標(biāo)簽中添加`omitempty`來(lái)實(shí)現(xiàn)這一功能,例如,將float32修改為*float322024-09-09golang使用http client發(fā)起get和post請(qǐng)求示例
這篇文章主要介紹了golang使用http client發(fā)起get和post請(qǐng)求示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02