
在使用 gomake 和 gotest 构建 Go 包时,如果你的包依赖于外部库,可能会遇到依赖解析的问题。goinstall 命令能够直接从 .go 文件中解析依赖,而 gomake 则需要手动处理这些依赖。
处理外部依赖的方法
-
在 import 语句中添加注释:
goinstall 命令会解析 .go 文件中的 import 语句来确定依赖关系。为了让 goinstall 正确识别依赖,需要在 import 语句中使用 "规范化" 的引用。
import ( gorilla_context "gorilla.googlecode.com/hg/gorilla/context" // ... 其他依赖 )这里,gorilla_context 是 gorilla.googlecode.com/hg/gorilla/context 包的别名。goinstall 会识别这个别名并正确安装依赖。
-
手动安装依赖:
gomake 不会自动解析和安装依赖,因此你需要手动安装它们。可以使用 go install 命令来安装依赖。
go install gorilla.googlecode.com/hg/gorilla/context
确保所有依赖都已安装,然后再使用 gomake 或 gotest。
示例 Makefile 文件
rmodal.js是一款带动画效果的js模态对话框插件。rmodal.js模态对话框插件压缩版本仅1.2kb,没有任何外部依赖,可以制作出带动画特效的模态对话框效果。它的特点还有: 使用简单,执行效率高。 纯js编写,没有任何外部依赖。 支持包括IE9+的所有现代浏览器。 可以和bootstrap和animate.css结合使用。 支持CommonJS AMD 或 globals。
一个典型的 Makefile 文件可能如下所示:
include ${GOROOT}/src/Make.inc
TARG=your_package_name
GOFILES=\
doc.go\
your_file.go\
DEPS=\
gorilla.googlecode.com/hg/gorilla/context
include ${GOROOT}/src/Make.pkg在这个 Makefile 中,TARG 定义了目标包的名称,GOFILES 列出了需要编译的 .go 文件,DEPS 列出了依赖的外部包。
处理 CGO 依赖
如果你的包使用了 CGO,你可以在注释指令中指定 CFLAGS 和 LDFLAGS。
/* #cgo CFLAGS: -I/usr/local/include #cgo LDFLAGS: -L/usr/local/lib -lzmq #include*/ import "C"
在这个例子中,#cgo CFLAGS 指定了 C 编译器的头文件搜索路径,#cgo LDFLAGS 指定了链接器的库文件搜索路径和需要链接的库。
总结与注意事项
- goinstall 通过解析 import 语句中的注释来确定依赖关系。
- gomake 不会自动解析依赖,需要手动安装。
- 对于 CGO 依赖,可以使用 #cgo CFLAGS 和 #cgo LDFLAGS 来指定编译和链接选项。
- 确保 $GOROOT 环境变量已正确设置。
- 在构建和测试之前,务必安装所有依赖。
通过遵循这些步骤,你可以成功地使用 gomake 和 gotest 构建包含外部依赖的 Go 包。









