Go语言二进制文件的读写操作
作者:C语言中文网 发布时间:2023-06-23 09:40:08
Go语言的二进制(gob)格式是一个自描述的二进制序列。从其内部表示来看,Go语言的二进制格式由一个 0 块或者更多块的序列组成,其中的每一块都包含一个字节数,一个由 0 个或者多个 typeId-typeSpecification 对组成的序列,以及一个 typeId-value 对。
如果 typeId-value 对的 typeId 是预先定义好的(例如 bool、int 和 string 等),则这些 typeId-typeSpecification 对可以省略。否则就用类型对来描述一个自定义类型(如一个自定义的结构体)。类型对和值对之间的 typeId 没有区别。
正如我们将看到的,我们无需了解其内部结构就可以使用 gob 格式, 因为 encoding/gob 包会在幕后为我们打理好一切底层细节。
Go语言中的 encoding/gob 包也提供了与 encoding/json 包一样的编码解码功能,并且容易使用。通常而言如果对肉眼可读性不做要求,gob 格式是Go语言上用于文件存储和网络传输最为方便的格式。
写Go语言二进制文件
下面通过一个简单的示例来演示一下Go语言是如何生成一个二进制文件的,代码如下所示:
package main
import (
"encoding/gob"
"fmt"
"os"
)
func main() {
info := "http://aspxhome.com/golang/"
file, err := os.Create("./output.gob")
if err != nil {
fmt.Println("文件创建失败", err.Error())
return
}
defer file.Close()
encoder := gob.NewEncoder(file)
err = encoder.Encode(info)
if err != nil {
fmt.Println("编码错误", err.Error())
return
} else {
fmt.Println("编码成功")
}
}
运行上面的代码会在当前目录下生成一个 output.gob 文件,文件内容如下所示:
210c 001e 6874 7470 3a2f 2f63 2e62 6961
6e63 6865 6e67 2e6e 6574 2f67 6f6c 616e
672f
读Go语言二进制文件
读 gob 数据和写一样简单,示例代码如下:
package main
import (
"encoding/gob"
"fmt"
"os"
)
func main() {
file, err := os.Open("./output.gob")
if err != nil {
fmt.Println("文件打开失败", err.Error())
return
}
defer file.Close()
decoder := gob.NewDecoder(file)
info := ""
err = decoder.Decode(&info)
if err != nil {
fmt.Println("解码失败", err.Error())
} else {
fmt.Println("解码成功")
fmt.Println(info)
}
}
运行结果如下:
go run main.go
解码成功http://aspxhome.com/golang/
来源:http://c.biancheng.net/view/4563.html


猜你喜欢
- js数字转换为float,取N个小数:=========================================javascript
- 本文用python实现线性回归算法,供大家参考,具体内容如下# -*- coding: utf-8 -*-"""
- 本文实例讲述了Python中类的定义、继承及使用对象的方法。分享给大家供大家参考。具体分析如下:Python编程中类的概念可以比作是某种类型
- 1,为了获取视频,你应该创建一个 VideoCapture 对象。他的参数可以是设备的索引号,或者是一个视频文件。设备索引号就是在指定要使用
- 示意图:html:(模态框等 html和js代码,参考:Django 创建/删除用户){# 权限管理 #} <div id
- 语法格式如下:assert expression等价于:if not expression: raise AssertionErrorass
- 最近做一个项目(Asp.net+Sql Server 2000),在原来开发的机器上运行没有任何问题.但当我在另外一台机
- 概述我们在使用mysql的时候,尤其是在创建数据库的时候,我们需要选择当前数据库的字符集和排序规则,这样你库里面的创建数据表的时候默认的编码
- 平时在写asp代码的时候有很多重复的内容要写,麻烦的要命,比如在收集表单提交的数据时,特别是表单的输入域比较多时,要不断写好多的reques
- 今天有朋友问我 Turtle的安装问题,在这里简单说在github上我们可以看到Turtle这个库很久没有更新了,里面还有一些python3
- 引子之前在学习Django时,对状态保持这个概念很模糊,不知道怎么去保持,通过什么去实现保持都不太清楚;稍微花了一点时间,把状态保持的基本概
- 代码如下# -*- coding:utf-8 -*-import cv2import numpy as npfrom tkinter imp
- 相信很朋友因为PyCharm最新激活码或激活补丁的安装参数每月都会失效而烦恼PyCharm最新激活码先分享个PyCharm最新激活码大家可以
- 一、打开一个网页获取所有的内容from urllib import urlopendoc = urlopen("http://ww
- 昨日内容:ORM高级查询-filterid=3id__gt=3id__lt=3id__lte=3id__gte=3-in /not in.f
- 本文实例为大家分享了python实现UDP文件传输的具体代码,供大家参考,具体内容如下UDP协议下文件传输:服务端import socket
- 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第四个自然段。以下叙述的脚本包括服务器端脚本和客户端的脚本,服务器端脚本指在服务器上
- 1、先导入HTMLTestRunner模块见生成HTMLTestRunner模块2、实例如下(1)单用例文件执行且生成报告import un
- 目录1、可迭代对象1.1什么是可迭代对象1.2怎么判断2、字符串的for循环3、列表的for循环4、元组的for循环5、字典的for循环5.
- 1.怎么样查看数据库字符集 [A]数据库服务器字符集select * from nls_database_parameters,其来源于pr