为了账号安全,请及时绑定邮箱和手机立即绑定

列出更新的文件而不再次使用 go build

列出更新的文件而不再次使用 go build

Go
慕少森 2022-11-08 14:35:50
我只是从 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


查看完整回答
反对 回复 2022-11-08
  • 1 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信