列出更新后的文件而无需再次使用 go build

List the updated files without using go build again

我刚刚开始使用 Go。我有一个关于 gorilla/mux.

的问题

我正在尝试列出目录中的文件;并且响应将从 GET 请求发回以列出文件。 现在,当我在目录中创建一个新文件时; GET 请求未列出新文件。 我知道我需要 运行 重新构建。我可以不用重新构建它吗?

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 []Images


func 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))
}

应用程序在启动时读取文件列表。要更新文件列表,您必须重新启动应用程序。您不需要 运行 go build 来获取更新的文件列表。

要获取每个请求的 up-to-date 文件列表,请读取请求处理程序函数中的文件列表:

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 package-level 变量中删除相应的代码。