douwen7516 2017-08-10 13:00
浏览 69
已采纳

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

I've created a RESTFul API via golang. The Issue is that when I send a /product request I will be given the result in json and when I repeat this request the result will append prevoius. I want to clear the REST data buffer and whenever I send a request, API send me fresh data, not with prevoius. What should I do?

Route Handler

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

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

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

Request Handler

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)
}
  • 写回答

1条回答 默认 最新

  • doyhq66282 2017-08-10 13:04
    关注

    You are declaring this as a global variable in your package:

    var product_out []ProductOut
    

    That way, the slice is just created once, and you are sharing it between requests.

    If you want to declare a new slice for each request, you should move that line inside your GetProductInfo function.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)