我只是從 Go 開始。我有一個關于大猩猩/多路復用器的問題。我正在嘗試列出目錄中的文件;并且響應將從 GET 請求發回以列出文件。現在,當我在目錄中創建一個新文件時;GET 請求沒有列出新文件。我知道我需要再次運行 go build。我可以在不重新構建的情況下做到這一點嗎?type Images struct { Image string `json:"image"` Path string `json:"path"` Timestamp string `json:"timestamp"` Labels string `json:"labels"` Version string `json:"version"`}var images []Imagesfunc getImages(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(images)}func main() { r := mux.NewRouter() files, err := ioutil.ReadDir(os.Args[1]) if err != nil { log.Fatal(err) } for _, file := range files { images = append(images, Images{Image: file.Name(), Path: os.Args[1]}) } fmt.Println(images) // Route handles & endpoints r.HandleFunc("/images", getImages).Methods("GET") log.Fatal(http.ListenAndServe(":8080", r))}
1 回答

FFIVE
TA貢獻1797條經驗 獲得超6個贊
應用程序在啟動時讀取文件列表。要更新文件列表,您必須重新啟動應用程序。您無需運行go build即可獲取更新的文件列表。
要獲取每個請求的最新文件列表,請閱讀請求處理函數中的文件列表:
func getImages(w http.ResponseWriter, r *http.Request) {
files, err := ioutil.ReadDir(os.Args[1])
if err != nil {
http.Error(w, "Internal server error", 500)
return
}
var images []Images
for _, file := range files {
images = append(images, Images{Image: file.Name(), Path: os.Args[1]})
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(images)
}
從包級變量中main()刪除相應的代碼。images
- 1 回答
- 0 關注
- 157 瀏覽
添加回答
舉報
0/150
提交
取消