前提说明

  • 应用监听的网络默认为0.0.0.0,而不是localhost(127.0.0.1)。
  • 平台默认支持5000端口,建议在go应用程序中指定端口为5000,Beego框架需在conf/app.conf添加httpport=5000
  • 代码中需含有.go文件,用于平台识别为Go语言项目

Web框架支持(以Beego为例)

这里以Beego为例说明,其他框架类似。
默认本地已经安装Go.

初始化GOPATH

#个人推荐:在.zshrc里添加如下
function goinit() {
    mkdir -p src bin pkg
    export GOPATH=$PWD
}
保存后source ~/.zshrc 生效

在go目录下输入goinit就自动export了GOPATH。

安装Godep

执行以下命令安装 Godep:

go get github.com/tools/godep

使用Godep

Godep 要求项目存放的目录结构为标准的 Go workspace,请务必保证自己的代码结构满足此条件。
初始状态项目结构:

├── bin
├── pkg
└── src
    └── beego #项目目录
        └── main.go

在beego目录下执行godep save ./...
如果提示godep: Package (github.com/astaxie/beego) not found
只需执行go get github.com/astaxie/beego即可,在执行godep save ./...

说明:执行godep save ./...命令后会把所有项目源码里 import 过的外部依赖代码和版本信息保存到 Godeps 目录的Godeps.json。

本地Beego项目结构大概如下:

.
├── bin
├── pkg
└── src
    ├── beego #上传到Git仓库
    │   ├── Godeps
    |   ├── hello.go
    │   ├── conf
    │   └── vendor
    │       └── github.com
    │           └── astaxie
    │               └── beego
    └── github.com

Godep配置文件实例节选

{
	"ImportPath": "beego",
	"GoVersion": "go1.8",
	"GodepVersion": "v79",
	"Packages": [
		"./..."
	],
	"Deps": [
		{
			"ImportPath": "github.com/astaxie/beego",
			"Comment": "v1.8.0",
			"Rev": "323a1c4214101331a4b71922c23d19b7409ac71f"
		},
		{
			"ImportPath": "github.com/astaxie/beego/config",
			"Comment": "v1.8.0",
			"Rev": "323a1c4214101331a4b71922c23d19b7409ac71f"
		}]

Demo结构:
提供的 demo 项目 go-hello 在本地的目录结构:

$GOPATH
└── src
    └── rhino_go/
            ├── Godeps
            │   ├── Godeps.json
            │   ├── Readme
            │   └── _workspace
            ├── hello
            │   └── main.go
            ├── Procfile
            ├── README.md
            └── static
                └── index.html

>不同版本的go和godep命令会有所不同,比如上面的命令中godep save -r ./...在go1.6版本中就没有了 -r选项。另外,新版本的godep不会在Godeps目录中生成_workspace目录,而是会在与Godeps同级的目录中生成vendor文件夹,其作用根_workspace类似。详情可以参考godep官网

Godep配置说明

Godeps/Godeps.json 是 Godep 的配置文件,以 JSON 的形式保存了整个项目的依赖信息,下面简单介绍下此 JSON 的几个节点:

字段 值类型 值内容
ImportPath 字符串 项目相对 GOPATH 的路径
GoVersion 字符串 执行 godep save
Packages 数组 执行 godep save 时指定的参数
Deps 数组 项目源码里 import 过的外部依赖地址以及版本信息

注意事项:

  • 编辑 GoVersion 的值可以指定部署时使用的 Go 版本。
  • 在本地执行 go get 更新了已有的依赖后,需要重新执行 godep save 命令来让 Godep 更新已保存的依赖。

配置文件格式:

type Godeps struct {
    ImportPath string
    GoVersion  string   // Abridged output of 'go version'.
    Packages   []string // Arguments to godep save, if any.
    Deps       []struct {
        ImportPath string
        Comment    string // Description of commit, if present.
        Rev        string // VCS-specific commit ID.
    }
}

平台部署操作

只需将项目上传到git仓库仓库即可.

➜  beego ls
Godeps  main.go vendor
#将beego目录上传到git仓库
持久化操作

建议进行数据持久化操作,具体参考高级设置-数据持久化

非web的go程序

对于非web的go程序,平台打包运行时会生成bin文件夹,并将编译的golang程序的二进制包放入bin目录中。

>比如:一个名为hello-demo的golang程序,平台运行后会生成hello-demo的二进制文件。该文件存放在bin 目录下

此时如果要运行该二进制文件,可以使用如下的Procfile

web: bin/hello-demo