Go语言的每个工作区中都会有以代码包为基本组织形式的源码文件。这里的源码文件又分为三种,即:命令源码文件、库源码文件和测试源码文件,它们都有着不同的用途和编写规则。
命令源码文件
命令源码文件是程序的运行入口,是每个可独立运行的程序必须拥有的。我们可以通过构建或安装,生成与其对应的可执行文件,后者一般会与该命令源码文件的直接父目录同名。
如果一个源码文件声明属于main包,并且包含一个无参数声明且无结果声明的main函数,那么它就是命令源码文件。 就像下面这段代码:
package main
import "fmt"
func main() {
fmt.Println("Hello, world!")
}
如果把这段代码存成 demo1.go 文件,那么运行go run demo1.go命令后就会在屏幕(标准输出)中看到Hello, world!
当需要模块化编程时,我们往往会将代码拆分到多个文件,甚至拆分到不同的代码包中。但无论怎样,对于一个独立的程序来说,命令源码文件永远只会也只能有一个。如果有与命令源码文件同包的源码文件,那么它们也应该声明属于main包。
命令源码文件总结
- 程序的独立入口
- 属于main包,包含无参数无结果的main函数
- 可通过go run命令运行,可接收命令行参数
- main函数执行的结束就意味着当前程序运行的结束
- 同一个代码包中不要放多个命令源码文件
- 命令源码文件与库源码文件也不应该放在同一个代码包中
- 构建后生成可执行文件,生成位置在命令执行目录
- 安装后生成可执行文件,生成位置在当前工作区的bin子目录
库源码文件
库源码文件是不能被直接运行的源码文件,它仅用于存放程序实体,这些程序实体可以被其他代码使用(只要遵从 Go 语言规范的话)。
这里的“其他代码”可以与被使用的程序实体在同一个源码文件内,也可以在其他源码文件,甚至其他代码包中。
--那么程序实体是什么呢?在 Go 语言中,程序实体是变量、常量、函数、结构体和接口的统称。
--我们总是会先声明(或者说定义)程序实体,然后再去使用。
--程序实体的名字被统称为标识符。标识符可以是任何 Unicode 编码可以表示的字母字符、数字以及下划线“_”,但是其首字母不能是数字。
--从规则上说,可以用中文作为变量的名字。但是,这种命名方式非常不好,应该在开发中明令禁止这种做法。作为一名合格的程序员,我们应该向着编写国际水准的程序无限逼近。
库源码文件总结
- 专门用于放置可供其他代码使用的程序实体
- 构建后只在操作系统的临时目录下生成临时文件(开发者可不关心)
- 构建作用在于检查和验证
- 安装后生成归档文件,扩展名为“.a”的文件,即为静态链接库文件
- 归档文件生成位置在当前工作区的pkg子目录
测试源码文件
功能测试源码文件
- 测试函数名称:TestXxx
- 测试函数签名:(t *testing.T)
性能(基准)测试源码文件
- 测试函数名称:BenchmarkXxx
- 测试函数签名:(b *testing.B)
示例(样本)测试源码文件
- 测试函数名称:ExampleXxx
- 测试函数签名:<没有硬性要求>
- 测试函数期望输出:放置在函数末尾,用注释行表示,形如//Output:xxx