1 回答
TA贡献1936条经验 获得超6个赞
逐行翻译 go 会变成这样:
func handleIncommingFile() http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
if r.Body == nil {
log.Println("body is empty")
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte(`{ 'status': 'error' }`))
return
}
body, err := io.ReadAll(r.Body)
if err != nil {
log.Printf("reading body: %v", err)
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte(`{ 'status': 'error' }`))
return
}
defer r.Body.Close()
if err := os.WriteFile("path/to/filename.ext", body, 0644); err != nil {
log.Printf("writting content: %v", err)
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte(`{ 'status': 'error' }`))
return
}
w.WriteHeader(http.StatusOK)
w.Write([]byte(`{ 'status': 'ok' }`))
}
}
请注意,我根据错误上下文返回不同的 HTTP 状态代码,并且缺少检查,例如,如果文件已经存在。
此外,我建议向处理程序注入存储服务以简化它并将文件创建逻辑移动到另一个包。
func handleIncommingFile(store storage.Manager) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
if err := store.Save(r.Body); err != nil {
w.WriteHeader(http.StatusInternalServerError)
return
}
w.WriteHeader(http.StatusOK)
// ...
这将帮助您测试 thandler 和存储测试 :)
- 1 回答
- 0 关注
- 96 浏览
添加回答
举报