起风了

“路海长 青夜旷 越过群山追斜阳”

Go语言使用Gob传输数据

为了让某个 数据结构能够在网络上传输或能够保存至文件,它必须被编码然后再解码。当然已经有许多可用的编码方式了,比如  JSON、 XML、Google 的 protocol buffers 等等。而现在又多了一种,由Go语言 encoding/gob 包提供的方式。 Gob 是Go语言自己以二进制形式序列化和反序列化程序数据的格式,可以...

Go语言纯文本文件的读写操作

Go语言提供了很多文件操作的支持,在不同场景下,有对应的处理方式,本节我们来介绍一下文本文件的读写操作。 写纯文本文件 由于Go语言的 fmt 包中打印函数强大而灵活,写纯文本数据非常简单直接,示例代码如下所示: package main import ( "bufio" "fmt" "os" ) func main() {...

Go语言二进制文件的读写操作

Go语言的二进制(gob)格式是一个自描述的二进制序列。从其内部表示来看,Go语言的二进制格式由一个 0 块或者更多块的序列组成,其中的每一块都包含一个字节数,一个由 0 个或者多个 typeId-typeSpecification 对组成的序列,以及一个 typeId-value 对。 如果 typeId-value 对的 typeId 是预先定义好的(例...

Go语言自定义二进制文件的读写操作

虽然Go语言的 encoding/gob 包非常易用,而且使用时所需代码量也非常少,但是我们仍有可能需要创建自定义的二进制格式。自定义的二进制格式有可能做到最紧凑的数据表示,并且读写速度可以非常快。 不过,在实际使用中,我们发现以Go语言二进制格式的读写通常比自定义格式要快非常多,而且创建的文件也不会大...

Go语言zip归档文件的读写操作

Go语言的标准库提供了对几种压缩格式的支持,其中包括 gzip,因此 Go 程序可以无缝地读写 .gz 扩展名的 gzip 压缩文件或非 .gz 扩展名的非压缩文件。此外标准库也提供了读和写 .zip 文件、tar 包文件(.tar 和 .tar.gz),以及读 .bz2 文件(即 .tar .bz2 文件)的功能。 本节我们将主要介绍 zip 归档文件的...

Go语言tar归档文件的读写操作

在上一节《 创建 .zip 归档文件》中我们介绍了 zip 归档文件的创建和读取,那么接下来介绍一下 tar 归档文件的创建及读取。 创建 tar 归档文件 tar 是一种打包格式,但不对文件进行压缩,所以打包后的文档一般远远大于 zip 和 tar.gz,因为不需要压缩的原因,所以打包的速度是非常快的,打包时 CPU 占用率...

Go语言使用buffer读取文件

buffer 是缓冲器的意思,Go语言要实现缓冲读取需要使用到 bufio 包。bufio 包本身包装了 io.Reader 和 io.Writer 对象,同时创建了另外的 Reader 和 Writer 对象,因此对于文本 I/O 来说,bufio 包提供了一定的便利性。 buffer 缓冲器的实现原理就是,将文件读取进缓冲(内存)之中,再次读取的时候就可以避...

Go语言文件的写入、追加、读取、复制操作

Go语言的 os 包下有一个 OpenFile 函数,其原型如下所示: func OpenFile(name string, flag int, perm FileMode) (file *File, err error) 其中 name 是文件的文件名,如果不是在当前路径下运行需要加上具体路径;flag 是文件的处理参数,为 int 类型,根据系统的不同具体值可能有所不同,但是作用是相同...

Go语言文件锁操作

我们使用Go语言开发一些程序的时候,往往出现多个进程同时操作同一份文件的情况,这很容易导致文件中的数据混乱。这时我们就需要采用一些手段来平衡这些冲突,文件锁(flock)应运而生,下面我们就来介绍一下。 对于 flock,最常见的例子就是 Nginx,进程运行起来后就会把当前的 PID 写入这个文件,当然如果...