1. 项目私有包
当项目多时一些项目定义的常量和函数如果不想被别的项目引用到,那么你可以在项目目录下建一个 internal
的文件夹,然后将不想被别人引用的都放到该文件夹下,在Go语言中 internal
下面的东西只能本项目使用,无法被其他项目引用
2. 私有接口
如果你定义了一个接口,不想被其他包误实现的话,你可以给该接口定义一个私有函数。
type Coder interface {
i() // 定义一个私有函数,防止其他包误实现
Code()
}
3. 多系统
如果某个功能,在windows、mac、Linux上需要不同的执行方式,那么我们可以定义3个文件,分别为这三个系统提供不一样的行为,当系统是 windows时,它会默认引用 *_windows.go
的文件,当系统是mac时它会引用 *_darwin.go
文件,当系统是Linux时它会自动引用*_linux.go
的文件,根据后缀的不同,在不同系统上引用的文件也不相同
4. 编译期校验接口实现
有时候一个结构体一定需要实现某个接口,但又不想在运行期才发现该结构体没实现,这时你可以定义一个空变量,让编译器来校验是否该结构体实现了某接口
// Error 结构体一定要实现Coder接口,不然编译器会报错
var _ Coder = &Error{}
5. 高级编译
5.1 指定文件在什么平台上编译
通过 // +build windows
可以保证该文件仅在windows参与编译, 注意要和package隔开一行
// +build windows
package main
// +build !windows
除了window平台,其他平台都编译
5.2 编译 tag
生产文件
// +build prod
package main
//...
开发文件
// +build dev
package main
//...
指定tag进行编译
go build -tags prod -o main