背景故事:我正在使用GET方法检索详细信息。我设法让程序将服务器给出的输出解析为标题为" output.json"的JSON文件。
问题:每次我发出不同的请求时,输出都会覆盖output.json文件中的所有先前内容。是否可以为每个请求创建一个新的JSON文件? 我对GoLang很新,任何帮助都非常有用:)
注意:我只显示用于调用API的方法,如果需要,我将显示其余的代码。
以下是我使用的方法:
func render(endpoint string, w http.ResponseWriter, r *http.Request) {
// check if request has cookie set
if cookie, err := r.Cookie(COOKIE_NAME); err != nil {
// else redirect to OAuth Authorization EP
redirectToOAuth(w, r, endpoint)
} else {
session := cookie.Value
accessToken := sessions[session]
// pipe api endpoint
ep := fmt.Sprintf("%s/%s", fidorConfig.FidorApiUrl, endpoint)
if api_req, err := http.NewRequest("GET", ep, nil); err != nil {
w.WriteHeader(500)
w.Write([]byte(err.Error()))
} else {
api_req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", accessToken))
api_req.Header.Set("Accept", "application/vnd.fidor.de; version=1,text/json")
client := &http.Client{}
if api_resp, err := client.Do(api_req); err != nil {
w.WriteHeader(500)
w.Write([]byte(err.Error()))
} else {
if api_resp.StatusCode == 401 { // token probably expired
handleLogout(w, r, endpoint)
return
}
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(api_resp.StatusCode)
defer api_resp.Body.Close()
out, err := os.Create("output.json")
if err != nil {
// panic?
}
defer out.Close()
io.Copy(out, api_resp.Body)
}
}
}
}
答案 0 :(得分:1)
如果你想在你的文件名中附加时间(比如@Florian建议),你可以在创建文件时做类似的事情:
out, err := os.Create(fmt.Sprintf("output-%d.json", time.Now().Unix()))
// filename => output-1257894000.json
此处time.Now().Unix()
返回自1970年1月1日UTC(又称Unix时间)以来经过的秒数。所以每次它都会创建不同的json文件。
有关时间的更多信息:https://golang.org/pkg/time/#Time.Unix
答案 1 :(得分:0)
如果您不希望覆盖您的文件,可以为文件指定其他名称(例如,使用time.Now()
附加当前时间),也可以append the output to the file, output.json包含所有json文件。