rest - 使用 Go(Golang) 清除先前的请求 RESTFul?

标签 rest go

我已经通过 golang 创建了一个 RESTFul API。 问题是,当我发送一个 /product 请求时,我将得到 json 格式的结果,当我重复此请求时,结果将附加 prevoius。 我想清除 REST 数据缓冲区,每当我发送请求时,API 都会向我发送新数据,而不是使用 prevoius。我该怎么办?

路由处理器

func main() {
    router := mux.NewRouter()

    router.HandleFunc("/product", GetProductInfo).Methods("GET")

    log.Printf("Listenning on Port %s ...\n", PORT)
    log.Fatal(http.ListenAndServe(PORT, router))
}

请求处理程序

type ProductOut struct {
    ID          int `json:"id,omitempty"`
    Title       string `json:"title,omitempty"`
    Description string `json:"description,omitempty"`
    Price       string `json:"price,omitempty"`
    Location    string `json:"location,omitempty"`
    Created_at  string `json:"created_at,omitempty"`
    Images      []string `json:"images,omitempty"`
}

var product_out []ProductOut

func GetProductInfo(w http.ResponseWriter, r *http.Request) {
    db_select_products := db.SelectProducts() // Gets data from database

    var out ProductOut

    for _, ele := range db_select_products {
        out.ID = contentGetFieldInteger(ele, "out_id") // A method for getting integer from struct field
        out.Title = contentGetFieldString(ele, "out_title") // A method for getting string from struct field
        out.Description = contentGetFieldString(ele, "out_description")
        out.Price = contentGetFieldString(ele, "out_price")
        out.Location = contentGetFieldString(ele, "out_location")
        out.Created_at = contentGetFieldString(ele, "out_created_at")

        db_select_image := db.SelectImages(out.ID) // Gets another data from database

        for _, imele := range db_select_image {
            out.Images = append(out.Images, imageGetFieldString(imele, "out_path"))
            fmt.Println(out.Images)
        }
        product_out = append(product_out, out)

        out.Images = nil
    }
    json.NewEncoder(w).Encode(product_out)
}

最佳答案

您在您的包中将其声明为全局变量:

var product_out []ProductOut

这样, slice 只会创建一次,您可以在请求之间共享它。

如果您想为每个请求声明一个新 slice ,您应该将该行移动到您的 GetProductInfo 函数中。

关于rest - 使用 Go(Golang) 清除先前的请求 RESTFul?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45614430/

相关文章:

go - pongo2 RegisterFilter 如何返回映射或数组?

go - 如何知道延迟函数是在成功执行函数后调用还是被 panic 调用

python - 如何构建从 URL 中提取多个参数的 Django REST 路由?

rest - Postman 测试脚本 - 检查状态是否为 NOT 200

RESTful API : require user agent string?

google-app-engine - 如何在 Google App Engine Standard Env for Go 中获取 request.RemoteAddr 和 X-AppEngine-Country、Region 等的输出?

go - 当我添加表达式 "fmt.Println()"时发生了什么

go - 如何在golang的字母表中获得等效字符数

java - RESTful 服务契约

java - 最小化 RESTful Java 生态系统中内部子系统之间依赖关系的策略