给定以下函数
func jsonBodyReader(config Config, r *http.Request) (io.Reader, error) {
bodyReader := io.LimitReader(r.Body, config.Reports.Max.Body)
// defer r.Body.Close()
gzipReader, err := gzip.NewReader(bodyReader)
if err != nil {
return nil, err
}
// defer gzipReader.Close()
return io.LimitReader(gzipReader, config.Reports.Max.Json), nil
}
Run Code Online (Sandbox Code Playgroud)
r.Body
处理和延迟关闭的最佳方法是什么gzipReader
?
是否真的有必要始终返回所有中间资源/流/读取器才能在父函数中推迟/关闭它们?
另一个例子
func save(target string, reader io.Reader) (io.Reader, *os.File, error) {
file, err := os.Create(target)
if err != nil {
return reader, nil, err
}
/// defer file.Close()
return io.TeeReader(reader, file), file, nil
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我必须返回os.File
才能打电话file.Close()
给家长。 …
我是一个新用语言,仍然学习并需要帮助.如何将我的应用程序日志用go语言编写成类似PHP phalcon框架的".log"文件?
我搜索谷歌并获得语言教程,但没有简单的理解示例.我尝试了一些示例,但日志文本不会连续写入.这是我以前用于记录日志记录的示例,我认为这完全是错误的.
package main
import (
"bufio"
"fmt"
"io/ioutil"
"os"
"time"
)
func check(e error) {
if e != nil {
panic(e)
}
}
func main() {
now := time.Now()
dt := now.Format("2006-01-02")
dt2 := now.Format("2006-01-02 15:04:05")
// To start, here's how to dump a string (or just
// bytes) into a file.
d1 := []byte("hello\ngo11\n" + dt2)
err := ioutil.WriteFile("/Users/my/Documents/work/src/logs/log-"+dt+".log", d1, 0644)
check(err)
// For more granular writes, open a file for writing.
f, err := os.Create("/Users/my/Documents/work/src/logs/log1.log")
check(err) …
Run Code Online (Sandbox Code Playgroud) go ×2