如何将结构作为二进制数据写入golang中的文件?

时间:2018-07-12 07:46:16

标签: file go

以下C代码的golang等效项是什么?

fwrite(&E, sizeof(struct emp), n, f);

我尝试使用

[]byte(i)

进行转换,但这似乎行不通。

2 个答案:

答案 0 :(得分:6)

您可以使用“编码/二进制”包:

import "encoding/binary"

func dump() {
    f, err := os.Create("file.bin")
    if err != nil {
        log.Fatal("Couldn't open file")
    }
    defer f.Close()

    var data = struct {
        n1 uint16
        n2 uint8
        n3 uint8
    }{1200, 2, 4}
    err = binary.Write(f, binary.LittleEndian, data)
    if err != nil {
        log.Fatal("Write failed")
    }
}

答案 1 :(得分:4)

您不应这样做,只需使用支持自动序列化和反序列化的序列化格式即可。 Go的标准库支持:

Gob:对结构进行二进制编码。当您不希望与其他语言互换时推荐使用。 https://golang.org/pkg/encoding/gob/

JSON:Welp,您知道...如果需要与其他语言交换序列化数据。 https://golang.org/pkg/encoding/json/

XML:如果您感到复古。

当然,如果您想要与其他语言(不支持json的类型)进行安全互换,则protobuf是另一个可以考虑的选择。 https://github.com/golang/protobuf