0

0

Golang如何写入二进制文件_Golang 二进制文件写入实践方法

P粉602998670

P粉602998670

发布时间:2025-12-02 16:53:47

|

300人浏览过

|

来源于php中文网

原创

使用os.WriteFile可直接写入小量二进制数据,bufio.Writer适合大量或频繁写入以提升性能,encoding/binary支持结构化数据按字节序写入,需注意缓冲刷新与错误处理。

golang如何写入二进制文件_golang 二进制文件写入实践方法

在Go语言中,写入二进制文件是一个常见的需求,尤其是在处理图像、音频、序列化数据或网络传输时。Golang 提供了标准库支持高效地操作二进制数据。下面介绍几种常用的写入二进制文件的方法,并结合实际示例说明。

使用 os.WriteFile 直接写入字节切片

对于小量数据,最简单的方式是将数据组织成 []byte,然后使用 os.WriteFile 一次性写入文件。

  • 适用于已知完整数据且不需要流式处理的场景
  • 操作简洁,适合配置文件、缓存数据等写入

示例:

package main

import (
    "os"
)

func main() {
    data := []byte{0x48, 0x65, 0x6c, 0x6c, 0x6f} // "Hello" 的 ASCII 码
    err := os.WriteFile("output.bin", data, 0644)
    if err != nil {
        panic(err)
    }
}

使用 bufio.Writer 提高写入效率

当需要频繁写入或数据量较大时,使用 bufio.Writer 可以减少系统调用次数,提升性能。

立即学习go语言免费学习笔记(深入)”;

  • 缓冲机制减少磁盘 I/O 次数
  • 适合分批写入或循环写入场景

示例:写入多个字节块

家饰网上商城系统
家饰网上商城系统

虚拟主机或在自备服务器中开设好的主机空间,主机环境要求:PHP4.3-5.x/非安全模式/允许WEB文件上传MYSQL4.2-5.xzend optimizer 3.2以上安装方法:1、将安装包解压后,将全部文件和目录上传到网站空间根目录, 用FTP上传时必须采用二进制方式。2、运行http://您的域名/(安装向导),或者进入网站安装http://您的域名/base/install/,填写MYS

下载
package main

import (
    "bufio"
    "os"
)

func main() {
    file, err := os.Create("data.bin")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    writer := bufio.NewWriter(file)
    chunks := [][]byte{
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9},
    }

    for _, chunk := range chunks {
        _, err := writer.Write(chunk)
        if err != nil {
            panic(err)
        }
    }

    // 别忘了刷新缓冲区
    err = writer.Flush()
    if err != nil {
        panic(err)
    }
}

使用 encoding/binary 写入结构化数据

当你需要将 Go 的结构体或基本类型(如 int32、float64)按二进制格式写入文件时,encoding/binary 包非常有用。

  • 支持大端(BigEndian)和小端(LittleEndian)字节序
  • 常用于协议数据、文件头、序列化存储

示例:写入整数和浮点数

package main

import (
    "encoding/binary"
    "os"
)

func main() {
    file, err := os.Create("numbers.bin")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    var value int32 = 1000
    err = binary.Write(file, binary.LittleEndian, value)
    if err != nil {
        panic(err)
    }

    var f float64 = 3.14159
    err = binary.Write(file, binary.LittleEndian, f)
    if err != nil {
        panic(err)
    }
}

写入自定义结构体

你可以将结构体按字段顺序逐个写入,注意字段必须可导出(大写字母开头),否则 binary.Write 无法访问。

type Header struct {
    ID   uint32
    Size uint32
    Name [16]byte
}

func main() {
    file, _ := os.Create("header.bin")
    defer file.Close()

    name := "example"
    var nameBytes [16]byte
    copy(nameBytes[:], name)

    header := Header{
        ID:   1,
        Size: 1024,
        Name: nameBytes,
    }

    binary.Write(file, binary.LittleEndian, header)
}

基本上就这些常用方法。根据你的数据类型和性能需求选择合适的方式:简单数据用 WriteFile,大量写入用 bufio,结构化数据用 binary 包。注意字节序一致性,特别是在跨平台场景下。不复杂但容易忽略的是刷新缓冲和错误处理,别让程序默默失败。

相关专题

更多
golang如何定义变量
golang如何定义变量

golang定义变量的方法:1、声明变量并赋予初始值“var age int =值”;2、声明变量但不赋初始值“var age int”;3、使用短变量声明“age :=值”等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

178

2024.02.23

golang有哪些数据转换方法
golang有哪些数据转换方法

golang数据转换方法:1、类型转换操作符;2、类型断言;3、字符串和数字之间的转换;4、JSON序列化和反序列化;5、使用标准库进行数据转换;6、使用第三方库进行数据转换;7、自定义数据转换函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

226

2024.02.23

golang常用库有哪些
golang常用库有哪些

golang常用库有:1、标准库;2、字符串处理库;3、网络库;4、加密库;5、压缩库;6、xml和json解析库;7、日期和时间库;8、数据库操作库;9、文件操作库;10、图像处理库。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

339

2024.02.23

golang和python的区别是什么
golang和python的区别是什么

golang和python的区别是:1、golang是一种编译型语言,而python是一种解释型语言;2、golang天生支持并发编程,而python对并发与并行的支持相对较弱等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

209

2024.03.05

golang是免费的吗
golang是免费的吗

golang是免费的。golang是google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言,采用bsd开源协议。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

391

2024.05.21

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

196

2025.06.09

golang相关判断方法
golang相关判断方法

本专题整合了golang相关判断方法,想了解更详细的相关内容,请阅读下面的文章。

191

2025.06.10

golang数组使用方法
golang数组使用方法

本专题整合了golang数组用法,想了解更多的相关内容,请阅读专题下面的文章。

192

2025.06.17

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

72

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 3.9万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号