起风了

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

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 写入这个文件,当然如果...

go build命令(go语言编译命令)完全攻略

Go语言的编译速度非常快。Go 1.9 版本后默认利用Go语言的并发特性进行函数粒度的并发编译。 Go语言的程序编写基本以源码方式,无论是自己的代码还是第三方代码,并且以 GOPATH 作为工作目录和一套完整的工程目录规则。因此Go语言中日常编译时无须像 C++ 一样配置各种包含路径、链接库地址等。 Go语言中使...

go clean命令——清除编译文件

Go语言中 go clean命令可以移除当前源码包和关联源码包里面编译生成的文件,这些文件包括以下几种: 执行go build命令时在当前目录下生成的与包名或者 Go 源码文件同名的可执行文件。在 Windows 下,则是与包名或者 Go 源码文件同名且带有“.exe”后缀的文件。 执行go test命令并加入-c标记时在当前目录下生...

go run命令——编译并运行

Python 或者 Lua 语言可以在不输出二进制的情况下,将代码使用虚拟机直接执行。Go语言虽然不使用虚拟机,但可使用 go run 指令达到同样的效果。 go run 命令会编译源码,并且直接执行源码的 main() 函数,不会在当前目录留下可执行文件。 下面我们准备一个 main.go 的文件来观察 go run 的运行结果,源码...

go fmt命令——格式化代码文件

对于一门编程语言来说,代码格式化是最容易引起争议的一个问题,不同的开发者可能会有不同的编码风格和习惯,但是如果所有开发者都能使用同一种格式来编写代码,那么开发者就可以将主要精力放在语言要解决的问题上,从而节省开发时间。 gofmt 介绍 Go语言的开发团队制定了统一的官方代码风格,并且推出了 ...

go install命令——编译并安装

go install 命令的功能和前面一节《 go build命令》中介绍的 go build 命令类似,附加参数绝大多数都可以与 go build 通用。go install 只是将编译的中间文件放在 GOPATH 的 pkg 目录下,以及固定地将编译结果放在 GOPATH 的 bin 目录下。 这个命令在内部实际上分成了两步操作:第一步是生成结果文件(可执...

go get命令——一键获取代码、编译并安装

go get 命令可以借助代码管理工具通过远程拉取或更新代码包及其依赖包,并自动完成编译和安装。整个过程就像安装一个 App 一样简单。 这个命令可以动态获取远程代码包,目前支持的有 BitBucket、GitHub、Google Code 和 Launchpad。在使用 go get 命令前,需要安装与远程包匹配的代码管理工具,如 Git、SVN...

go generate命令——在编译前自动化生成某类代码

go generate命令是在Go语言 1.4 版本里面新添加的一个命令,当运行该命令时,它将扫描与当前包相关的源代码文件,找出所有包含 //go:generate的特殊注释,提取并执行该特殊注释后面的命令。 使用 go generate命令时有以下几点需要注意: 该特殊注释必须在 .go 源码文件中; 每个源码文件可以包含多个 g...

go test命令(Go语言测试命令)完全攻略

Go语言拥有一套单元测试和性能测试系统,仅需要添加很少的代码就可以快速测试一段需求代码。 go test 命令,会自动读取源码目录下面名为 *_test.go 的文件,生成并运行测试用的可执行文件。输出的信息类似下面所示的样子: ok archive/tar 0.011s FAIL archive/zip 0.022s ok compress/gzip 0.033s ... ...