程序的一般过程:编辑、编译、链接、运行。由于golang的一个项目源码都是开源的,我们很少去关心编译、链接的问题。如果在一个项目中使用了非开源的第三方库,此时怎么打包出来一个可执行的exe程序?
golang使用静态文件编译
使用go tool compile
golang使用静态文件链接
使用go tool link
//staticpkg/print.go
package staticpkg
import "fmt"
func Hello() {
fmt.Println("hello")
}
//运行 go install 会生成对应的.a文件
//修改print.go文件,去掉函数实现,
//main/main.go
package main
import (
"staticpkg"
)
func main() {
staticpkg.Hello()
}
//使用tool的compile命令编译当前项目
go tool compile -I $GOPATH/windows_amd64 main.go
//会生成一个main.o文件
//使用tool的link命令生成可执行文件
go tool link -o main.exe -L $GOPATH/windows_amd64 main.go
//会生成一个main.exe程序,直接运行会输出hello
//如果直接go run main.go此时没有任何输出
使用静态文件(.a文件)进行编译和链接时,只需要有对应的.a文件即可。但是.a文件是无法查看到对应包中的一些定义的,如果要使用.a文件进行开发,还需要一份对应的声明文件。
https://github.com/golangaccount/exporthead是一个简单的导出go package声明的项目,里面移除了函数的实现细节和type或interface中的非导出item