登录
首页 >  Golang >  Go问答

在 Go 中是否应该为 IO 操作添加帮助函数?

来源:stackoverflow

时间:2024-02-26 17:12:17 299浏览 收藏

本篇文章向大家介绍《在 Go 中是否应该为 IO 操作添加帮助函数?》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

我有 c# 背景,使用 file.readalllinesfile.writealllines 等来自 system.io 命名空间的 io 方法。我有点惊讶地发现 go 没有这些 io 操作的便利函数。为了避免代码重复,我编写了以下帮助程序。有什么理由不这样做吗?

// WriteBytes writes the passed in bytes to the specified file. Before writing,
// if the file already exists, deletes all of its content; otherwise, creates
// the file.
func WriteBytes(filepath string, bytes []byte) (err error) {
    file, err := os.Create(filepath)
    if err != nil {
        return err
    }
    defer closeWithErrorPropagation(file, &err)

    _, err = file.Write(bytes)
    if err != nil {
        return err
    }

    return err
}

// WriteString writes the passed in sting to the specified file. Before writing,
// if the file already exists, deletes all of its content; otherwise, creates
// the file.
func WriteString(filepath string, text string) (err error) {
    file, err := os.Create(filepath)
    if err != nil {
        return err
    }
    defer closeWithErrorPropagation(file, &err)

    _, err = file.WriteString(text)
    if err != nil {
        return err
    }

    return err
}

// WriteLines writes the passed in lines to the specified file. Before writing,
// if the file already exists, deletes all of its content; otherwise, creates
// the file.
func WriteLines(filepath string, lines []string) (err error) {
    file, err := os.Create(filepath)
    if err != nil {
        return err
    }
    defer closeWithErrorPropagation(file, &err)

    for _, line := range lines {
        _, err := file.WriteString(fmt.Sprintln(line))
        if err != nil {
            return err
        }
    }

    return err
}

func closeWithErrorPropagation(c io.Closer, err *error) {
    if closerErr := c.Close(); closerErr != nil && *err == nil { // Only propagate the closer error if there isn't already an earlier error.
        *err = closerErr
    }
}

正确答案


os.WriteFile 可以处理 writebyteswritestring 函数的等效功能:

// func writebytes(filepath string, bytes []byte) (err error)

err = os.writefile("testdata/hello", []byte("hello, gophers!"), 0666)


// func writestring(filepath string, text string) (err error)

text := "hello, gophers!"
err = os.writefile("testdata/hello", []byte(text), 0666)

strings.Join结合可以处理writelines

//func WriteLines(filepath string, lines []string) (err error)

lines := []string{"hello", "gophers!"}
err = os.WriteFile("testdata/hello", []byte(strings.Join(lines, "\n")), 0666)

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>