Golang:将 []int 写入文件



我在p []int中有一些数据,我想将其保存/加载到/从文件加载。我应该将此切片转换为[]byte并使用(如果是,如何?

func (f *File) Read(b []byte) (n int, err Error)
func (f *File) Write(b []byte) (n int, err error)

或者还有其他方法可以将[]int保存到文件?

我读了这个如何使用golang读取/写入文件?,它没有帮助。

如果交换格式(在 go 以外的语言之间)或将其作为流读取对您来说并不重要,只需使用 gob 编码器和解码器即可。

http://golang.org/pkg/encoding/gob/

这个想法是,你在编写器周围创建一个编码器,或者在阅读器周围创建一个解码器,然后要求他们编码或解码结构。编码是这样的:

p := []int{1,2,3,4}
encoder := gob.NewEncoder(myFileWriter)
err = encoder.Encode(p)
if err != nil {
    panic(err)
}

解码的工作方式正好相反:

decoder := gob.NewDecoder(myFileReader)
p := []int{}
err = decoder.Decode(&p)
if err != nil {
         panic(err)
}

或者,您可以使用标准库中提供的类似方法,将数据存储为 JSON 或 XML,这使您可以更轻松地调试内容,并打开其他语言的数据(以大小和效率为代价)。

您可以使用

file.WriteString(fmt.Sprintln(p))

一个完整的例子:

    /*path of the file test.txt : you have to change it*/
var path = "/Users/Pippo/workspace/Go/src/......./test.txt"
func main() {
    p := []int{1, 2, 3, 4, 5, 8, 99}
    fmt.Println(p)
    createFile()
    writeFile(p)
}
/*create file*/
func createFile() {
    // detect if file exists
    var _, err = os.Stat(path)
    // create file if not exists
    if os.IsNotExist(err) {
        var file, err = os.Create(path)
        if isError(err) {
            return
        }
        defer file.Close()
    }
    fmt.Println("==> done creating file", path)
}

/* print errors*/
func isError(err error) bool {
    if err != nil {
        fmt.Println(err.Error())
    }
    return (err != nil)
}
/*writeFile write the data into file*/
func writeFile(p []int) {
    // open file using READ & WRITE permission
    var file, err = os.OpenFile(path, os.O_RDWR, 0644)
    if isError(err) {
        return
    }
    defer file.Close()
    // write into file
    _, err = file.WriteString(fmt.Sprintln(p))
    if isError(err) {
        return
    }
    // save changes
    err = file.Sync()
    if isError(err) {
        return
    }
    fmt.Println("==> done writing to file")
}

相关内容

  • 没有找到相关文章