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

我只是从 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 []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))

}


慕少森
浏览 128回答 1
1回答

FFIVE

应用程序在启动时读取文件列表。要更新文件列表,您必须重新启动应用程序。您无需运行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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go