登录
首页 >  Golang >  Go问答

将数据写入二进制文件

来源:stackoverflow

时间:2024-03-01 18:03:23 344浏览 收藏

学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《将数据写入二进制文件》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

问题内容

我正在尝试将嵌套结构与二进制文件相同。 将来会有很多“房间”记录,因此二进制文件中的序列化结构是我认为最好的方法。

package main

import (
    "bytes"
    "encoding/binary"
    "log"
    "time"
)

type House struct {
    ID     int
    Floors int
    Rooms  []Room
}

type Room struct {
    Width       int
    Height      int
    Description string
    CreatedAt   time.Time
}

func main() {
    var house House = House{
        ID: 1,
        Floors: 3,
    }

    house.Rooms = append(house.Rooms, Room{Width: 20, Height: 30, CreatedAt: time.Now(), Description: "This is description"})
    house.Rooms = append(house.Rooms, Room{Width: 14, Height: 21, CreatedAt: time.Now(), Description: "This is other description"})
    house.Rooms = append(house.Rooms, Room{Width: 12, Height: 43, CreatedAt: time.Now(), Description: "This is other desc"})

    log.Println(house)

    buf := new(bytes.Buffer)
    err := binary.Write(buf, binary.LittleEndian, house)
    if err != nil {
        log.Println(err)
    }

}

但是我有错误: - binary.write:无效类型 main.house

有人可以帮助我吗,因为我找不到解决方案。


解决方案


根据 binary.Write 文档:

数据必须是固定大小的值或固定大小值的切片,或者指向此类数据的指针。

您的 House 结构不是固定大小值。

您可以考虑单独写入/读取 HouseRoom。用于存储 house 结构的 House 不得包含切片,因此您可以声明另一个用于从文件中读取/写入的 House 结构。

您可以将对象存储为 JSON,而不是二进制文件,这样您就不需要处理此问题。

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

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