在 Go 中为 IO 操作添加帮助程序是不是不好的做法?

我来自C#背景,并使用IO方法,如和来自命名空间。我有点惊讶地发现Go没有这些IO操作的便利功能。为了避免代码重复,我编写了以下帮助程序。有什么理由不这样做吗?File.ReadAllLinesFile.WriteAllLinesSystem.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

    }

}


精慕HU
浏览 145回答 1
1回答

ABOUTYOU

操作系统。写文件可以处理 和 函数的等效功能: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)并与字符串组合。加盟可以处理:WriteLines//func WriteLines(filepath string, lines []string) (err error)lines := []string{"hello", "gophers!"}err = os.WriteFile("testdata/hello", []byte(strings.Join(lines, "\n")), 0666)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go