如何部署 Go 应用 #编程语言支持 ##如何部署 Go 应用 Flynn 使用 [Go buildpack](https://github.com/kr/heroku-buildpack-go) 来支持 Go 语言。 ##检测 当检测到部署的应用里包含以`.go` 为后缀的文件时,Flynn 会使用 Go buildpack。 ##环境依赖 Go buildpack 提供两个方法安装依赖的软件包,`godep` 和 `go get`,推荐使用 [godep](https://github.com/tools/godep),这个命令可以将依赖的软件包存储在 git 仓库里,可以在重复性部署的时候自动解决依赖关系。 ##godep 命令 使用 [godep](https://github.com/tools/godep) 命令保存依赖的软件包,进入应用的目录,运行`godep save`命令,然后提交 Godeps 目录。当在 Flynn 里部署应用的时候,`Godeps`目录里的软件包会被自动安装。 ##go get 命令 如果应用的代码仓库里没有`Godeps`目录,buildpack 会自动下载 [Mercurial](http://mercurial.selenic.com/) 和 [Bazaar](http://bazaar.canonical.com/en/),并运行 `go get` 命令安装所导入软件包的最新版本。这种方式比较慢,并且不能重复构建的过程,所以不可靠。 如果不使用`godep`,应用的根目录里需要有一个`.godir`文件。这个文件里包含应用软件包的完整路径,Flynn 读取这个参数来定位软件包并且给应用命名。例如:一个应用根目录下的`.godir`文件包含`github.com/flynn/flynn`,表示这个应用的名称为:`flynn`。 ##Go 版本 使用`godep`命令时,可以通过`Godeps/Godeps.json`里的`GoVersion`来指定 Go 的版本。 如果不使用 `godep` ,系统默认使用构建包里的最新版本。 ##二进制程序 应用目录下的所有主软件包都要被编译成二进制格式,并存放在`/app/bin`目录里,该路径包含在系统的`PATH`环境变量里。程序以包含它们的目录来命名。 如果应用的根目录下包含一个主软件包(main package),最终应用的名称会根据主软件包的路径得出。如果你使用`godep`,系统从`Godeps/Godeps.json`里读取`ImportPath`参数得到这个路径,如果你不使用`godep`,系统会读取`.godir`文件。 ##应用类型 在应用根目录下的 `Procfile`里声明应用支持的类型,一种应用类型占一行,格式:`TYPE: COMMAND`。 例如:应用的根目录下有一个主软件包,软件包路径为:`github.com/flynn/myserver`,那么,最终应用会被命名为:`myserver`,`Procfile`里的定义如下: web: myserver `web`类型的应用会有默认的 HTTP 路由,会在环境变量里定义服务器监听的通信端口(`PORT`)。