溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何實(shí)現(xiàn)golang文件服務(wù)器

發(fā)布時(shí)間:2020-07-30 13:47:01 來(lái)源:億速云 閱讀:275 作者:小豬 欄目:編程語(yǔ)言

這篇文章主要為大家展示了如何實(shí)現(xiàn)golang文件服務(wù)器,內(nèi)容簡(jiǎn)而易懂,希望大家可以學(xué)習(xí)一下,學(xué)習(xí)完之后肯定會(huì)有收獲的,下面讓小編帶大家一起來(lái)看看吧。

一、方法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),例如你寫(xiě)成”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)于如何實(shí)現(xiàn)golang文件服務(wù)器的內(nèi)容,如果你們有學(xué)習(xí)到知識(shí)或者技能,可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI