我只是从 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 关注
- 123 浏览
添加回答
举报
0/150
提交
取消