相关疑难解决方法(0)

使用中间资源时如何处理函数中的“defer”

给定以下函数

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

1
推荐指数
1
解决办法
46
查看次数

如何在golang中写入.log文件?

我是一个新用语言,仍然学习并需要帮助.如何将我的应用程序日志用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

0
推荐指数
1
解决办法
8731
查看次数

标签 统计

go ×2