golang實(shí)現(xiàn)http server提供文件下載功能
簡(jiǎn)介
Go(又稱Golang)是Google開(kāi)發(fā)的一種靜態(tài)強(qiáng)類型、編譯型、并發(fā)型,并具有垃圾回收功能的編程語(yǔ)言。
羅伯特·格瑞史莫(Robert Griesemer),羅勃·派克(Rob Pike)及肯·湯普遜(Ken Thompson)于2007年9月開(kāi)始設(shè)計(jì)Go,稍后Ian Lance Taylor、Russ Cox加入項(xiàng)目。Go是基于Inferno操作系統(tǒng)所開(kāi)發(fā)的。Go于2009年11月正式宣布推出,成為開(kāi)放源代碼項(xiàng)目,并在Linux及Mac OS X平臺(tái)上進(jìn)行了實(shí)現(xiàn),后來(lái)追加了Windows系統(tǒng)下的實(shí)現(xiàn)。在2016年,Go被軟件評(píng)價(jià)公司TIOBE 選為“TIOBE 2016 年最佳語(yǔ)言”。 目前,Go每半年發(fā)布一個(gè)二級(jí)版本(即從a.x升級(jí)到a.y)。
go就是golang 全名是 golang 簡(jiǎn)稱go語(yǔ)言
golang實(shí)現(xiàn)http server提供文件下載功能,具體代碼如下所示:
func FileDownload(w http.ResponseWriter, r *http.Request) { filename := get_filename_from_request(r) file, _ := os.Open(filename) defer file.Close() fileHeader := make([]byte, 512) file.Read(fileHeader) fileStat, _ := file.Stat() w.Header().Set("Content-Disposition", "attachment; filename=" + filename) w.Header().Set("Content-Type", http.DetectContentType(fileHeader)) w.Header().Set("Content-Length", strconv.FormatInt(fileStat.Size(), 10)) file.Seek(0, 0) io.Copy(w, file) return }
ps:下面看下golang最簡(jiǎn)單的http server
簡(jiǎn)單的hello world
package main import ( "fmt" "io" "net/http" ) func main() { http.HandleFunc("/", helloWorld) e:=http.ListenAndServe(":8888",nil) if e!=nil{ fmt.Println(e.Error()) } } func helloWorld(w http.ResponseWriter, r *http.Request) { str:="Hello World" n,e:=io.WriteString(w, str) if e!=nil{ fmt.Println(e.Error()) } else { fmt.Println(n," " ,len(str)) } }
總結(jié)
以上所述是小編給大家介紹的golang實(shí)現(xiàn)http server提供文件下載功能,希望對(duì)大家有所幫助!
相關(guān)文章
通過(guò)案例簡(jiǎn)單聊聊為什么說(shuō)Go中的字符串是不能被修改的
在接觸Go這么語(yǔ)言,可能你經(jīng)常會(huì)聽(tīng)到這樣一句話,對(duì)于字符串不能修改,可能你很納悶,日常開(kāi)發(fā)中我們對(duì)字符串進(jìn)行修改也是很正常的,為什么又說(shuō)Go中的字符串不能進(jìn)行修改呢,本文就來(lái)通過(guò)實(shí)際案例給大家演示,為什么Go中的字符串不能進(jìn)行修改2023-07-07Go語(yǔ)言使用Request,Response處理web頁(yè)面請(qǐng)求
這篇文章主要介紹了Go語(yǔ)言使用Request,Response處理web頁(yè)面請(qǐng)求,需要的朋友可以參考下2022-04-04Golang使用gob實(shí)現(xiàn)結(jié)構(gòu)體的序列化過(guò)程詳解
Golang struct類型數(shù)據(jù)序列化用于網(wǎng)絡(luò)傳輸數(shù)據(jù)或在磁盤(pán)上寫(xiě)入數(shù)據(jù)。在分布式系統(tǒng)中,一端生成數(shù)據(jù)、然后序列化、壓縮和發(fā)送;在另一端,接收數(shù)據(jù)、然后解壓縮、反序列化和處理數(shù)據(jù),整個(gè)過(guò)程必須快速有效2023-03-03go單例實(shí)現(xiàn)雙重檢測(cè)是否安全的示例代碼
這篇文章主要介紹了go單例實(shí)現(xiàn)雙重檢測(cè)是否安全,本文給大家分享雙重檢驗(yàn)示例代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03Go type關(guān)鍵字(類型定義與類型別名的使用差異)用法實(shí)例探究
這篇文章主要為大家介紹了Go type關(guān)鍵字(類型定義與類型別名的使用差異)用法實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Go語(yǔ)言使用釘釘機(jī)器人推送消息的實(shí)現(xiàn)示例
本文主要介紹了Go語(yǔ)言使用釘釘機(jī)器人推送消息的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09使用Go語(yǔ)言編寫(xiě)簡(jiǎn)潔代碼的最佳實(shí)踐
簡(jiǎn)潔的代碼對(duì)于創(chuàng)建可維護(hù)、可閱讀和高效的軟件至關(guān)重要,Go 是一種強(qiáng)調(diào)簡(jiǎn)單和代碼整潔的語(yǔ)言,在本文中,我們將結(jié)合代碼示例,探討編寫(xiě)簡(jiǎn)潔 Go 代碼的最佳實(shí)踐,需要的朋友可以參考下2023-09-09