最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決golang http.FileServer 遇到的坑

 更新時(shí)間:2020年12月18日 09:56:42   作者:一名路過的小碼農(nóng)  
這篇文章主要介紹了解決golang http.FileServer 遇到的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

上次寫了一個(gè)2行實(shí)現(xiàn)一個(gè)靜態(tài)服務(wù)器的文章

今天群里有個(gè)哥們是這么寫居然返回的是404 見鬼了嘛??

http.handle("/js", http.FileServer(http.Dir("js"))

http.ListenAndServe("8080", nil)

大概的意思就是綁定 路由為 js 的時(shí)候訪問這個(gè)js 文件夾 看了一下確實(shí)代碼上面沒什么毛病。但是路徑怎么修改 也不好使。

我把代碼拿到我的 電腦上面運(yùn)行 shitfuck 這是搞什么啊居然出現(xiàn)下面的這個(gè)情況

奇怪居然在我電腦上面也不能執(zhí)行了。莫非我的文件夾權(quán)限有問題

給賦值一下 777 權(quán)限 重新運(yùn)行

居然還不好使。來回改路徑 就這么搗鼓了兩個(gè)小時(shí)無意中看到一個(gè)文章就是說的這個(gè)

加一個(gè)StripPrefix 方法就好了

那這個(gè)玩意是干嘛的呢。看看手冊

然后我的代碼就變成這個(gè)樣子

http.Handle("/js/", http.StripPrefix("/js/", http.FileServer(http.Dir("js"))))

http.StripPrefix用于過濾request,參數(shù)里的handler的request過濾掉特定的前序,只有這樣,才能正確顯示文件目錄。 shitfuck

看一下我的路徑 以及下面存放的文件

修改代碼完成后就這么神奇般的解決了

浪費(fèi)了兩個(gè)小時(shí)不過 還不錯(cuò)最起碼解決問題了。

補(bǔ)充:Golang1.8標(biāo)準(zhǔn)庫http.Fileserver跟http.ServerFile小例子

我就廢話不多說了,大家還是直接看代碼吧~

package main
import (
  "fmt"
  "net/http"
  "os"
  "path"
  "strings"
)
var staticfs = http.FileServer(http.Dir("D:\\code\\20160902\\src\\"))
func main() {
  //瀏覽器打開的時(shí)候顯示的就是D:\\code\\20160902\\src\\client目錄下的內(nèi)容"
  http.Handle("/client/", http.FileServer(http.Dir("D:\\code\\20160902\\src\\")))
  http.HandleFunc("/static/", static)
  http.HandleFunc("/js/", js)
  http.HandleFunc("/", route)
  http.ListenAndServe(":1789", nil)
}
func route(w http.ResponseWriter, r *http.Request) {
  fmt.Println(r.URL)
  fmt.Fprintln(w, "welcome")
  r.Body.Close()
}
//這里可以自行定義安全策略
func static(w http.ResponseWriter, r *http.Request) {
  fmt.Printf("訪問靜態(tài)文件:%s\n", r.URL.Path)
  old := r.URL.Path
  r.URL.Path = strings.Replace(old, "/static", "/client", 1)
  staticfs.ServeHTTP(w, r)
}
//設(shè)置單文件訪問,不能訪問目錄
func js(w http.ResponseWriter, r *http.Request) {
  fmt.Printf("不能訪問目錄:%s\n", r.URL.Path)
  old := r.URL.Path
  name := path.Clean("D:/code/20160902/src" + strings.Replace(old, "/js", "/client", 1))
  info, err := os.Lstat(name)
  if err == nil {
    if !info.IsDir() {
      http.ServeFile(w, r, name)
    } else {
      http.NotFound(w, r)
    }
  } else {
    http.NotFound(w, r)
  }
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Go語言sync.Cond使用方法詳解

    Go語言sync.Cond使用方法詳解

    Go語言標(biāo)準(zhǔn)庫中還包含條件變量 sync.Cond,它可以讓一組 Goroutine 都在滿足特定條件時(shí)被喚醒,每一個(gè)sync.Cond結(jié)構(gòu)體在初始化時(shí)都需要傳入一個(gè)互斥鎖,接下來我們將通過文中例子了解它的使用方法,感興趣的同學(xué)跟著小編一起來看看吧
    2023-07-07
  • Go實(shí)現(xiàn)基于RSA加密算法的接口鑒權(quán)

    Go實(shí)現(xiàn)基于RSA加密算法的接口鑒權(quán)

    這篇文章主要介紹了Go實(shí)現(xiàn)基于RSA加密算法的接口鑒權(quán),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • go內(nèi)存緩存BigCache實(shí)現(xiàn)BytesQueue源碼解讀

    go內(nèi)存緩存BigCache實(shí)現(xiàn)BytesQueue源碼解讀

    這篇文章主要為大家介紹了go內(nèi)存緩存BigCache實(shí)現(xiàn)BytesQueue源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Go語言如何使用分布式鎖解決并發(fā)問題

    Go語言如何使用分布式鎖解決并發(fā)問題

    這篇文章主要為大家詳細(xì)介紹了Go 語言生態(tài)中基于 Redis 實(shí)現(xiàn)的分布式鎖庫 redsync,并探討其使用方法和實(shí)現(xiàn)原理,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • Go?Wails開發(fā)桌面應(yīng)用使用示例探索

    Go?Wails開發(fā)桌面應(yīng)用使用示例探索

    這篇文章主要為大家介紹了Go?Wails的使用示例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 解決golang gin框架跨域及注解的問題

    解決golang gin框架跨域及注解的問題

    這篇文章主要介紹了解決golang gin框架跨域及注解的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 入門學(xué)習(xí)Go的基本語法

    入門學(xué)習(xí)Go的基本語法

    這篇文章主要介紹了Go語法的基本概念,本文講解了Golang的基本知識(shí)、基礎(chǔ)語法、相關(guān)術(shù)語等,需要的朋友可以參考下,希望能幫助到你
    2021-07-07
  • Go映射的使用

    Go映射的使用

    Go提供了另一個(gè)重要的數(shù)據(jù)類型,稱為map,它將唯一鍵映射到值,本文主要介紹了Go映射的使用,包括聲明映射、初始化映射、操作映射等,感興趣的可以了解一下
    2023-11-11
  • 深入Golang之context的用法詳解

    深入Golang之context的用法詳解

    本篇文章主要介紹了深入Golang之context的用法詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • Go利用反射reflect實(shí)現(xiàn)獲取接口變量信息

    Go利用反射reflect實(shí)現(xiàn)獲取接口變量信息

    反射是通過實(shí)體對(duì)象獲取反射對(duì)象(Value、Type),然后可以操作相應(yīng)的方法。本文將利用Go語言中的反射reflect實(shí)現(xiàn)獲取接口變量信息,需要的可以參考一下
    2022-05-05

最新評(píng)論

台中市| 南岸区| 淳化县| 苍南县| 房产| 林周县| 永昌县| 甘德县| 磐安县| 五台县| 黄石市| 抚顺县| 武宣县| 苏尼特右旗| 建德市| 邵东县| 望谟县| 澄迈县| 改则县| 湖州市| 海伦市| 沽源县| 镇原县| 托克托县| 自贡市| 泸定县| 四平市| 太保市| 淮南市| 洪泽县| 怀安县| 靖远县| 比如县| 株洲市| 普陀区| 酒泉市| 平潭县| 绩溪县| 白水县| 建德市| 雷州市|