はじめに

こんにちは。インフラエンジニアレベル1のf_prgです。
go言語の管理ツールのgom(Go Manager)を使ってみようと思います。

gomのセットアップをします

goコマンドのgetでセットアップします。

[f_prg@gom] $ go get github.com/mattn/gom

確認してみます。

[f_prg@Documents] $ which gom
/Users/f_prg/.goenv/shims/gom

Gomfileを作成します

[f_prg@gom] $ gom gen gomfile
[f_prg@gom] $ ls
Gomfile
[f_prg@gom] $ vim Gomfile
[f_prg@gom] $ cat Gomfile
gom "github.com/mitchellh/gox"

パッケージをインストールします

[f_prg@gom] $ gom install
downloading github.com/mitchellh/gox
[f_prg@gom] $ ls
Gomfile _vendor

main.goファイルを用意します

[f_prg@gom] $ cat main.go
package main

import "fmt"

func main() {
    fmt.Println("Hello, Gom")
}

パッケージを使って、実行してみます

Goxパッケージを使ってみました。

[f_prg@gom] $ gom exec gox -build-toolchain
The toolchain build can't be parallelized because compiling a single
Go source directory can only be done for one platform at a time. Therefore,
the toolchain for each platform will be built one at a time.

--> Toolchain: darwin/386
--> Toolchain: darwin/amd64
--> Toolchain: linux/386
--> Toolchain: linux/amd64
--> Toolchain: linux/arm
--> Toolchain: freebsd/386
--> Toolchain: freebsd/amd64
--> Toolchain: openbsd/386
--> Toolchain: openbsd/amd64
--> Toolchain: windows/386
--> Toolchain: windows/amd64
--> Toolchain: freebsd/arm
--> Toolchain: netbsd/386
--> Toolchain: netbsd/amd64
--> Toolchain: netbsd/arm
--> Toolchain: plan9/386
[f_prg@gom] $ gom exec gox
Number of parallel builds: 4

-->      darwin/386: _/Users/f_prg/Documents/dev/gom
-->    darwin/amd64: _/Users/f_prg/Documents/dev/gom
-->       linux/386: _/Users/f_prg/Documents/dev/gom
-->     linux/amd64: _/Users/f_prg/Documents/dev/gom
-->       linux/arm: _/Users/f_prg/Documents/dev/gom
-->     freebsd/386: _/Users/f_prg/Documents/dev/gom
-->   freebsd/amd64: _/Users/f_prg/Documents/dev/gom
-->     openbsd/386: _/Users/f_prg/Documents/dev/gom
-->   openbsd/amd64: _/Users/f_prg/Documents/dev/gom
-->     windows/386: _/Users/f_prg/Documents/dev/gom
-->   windows/amd64: _/Users/f_prg/Documents/dev/gom
-->     freebsd/arm: _/Users/f_prg/Documents/dev/gom
-->      netbsd/386: _/Users/f_prg/Documents/dev/gom
-->    netbsd/amd64: _/Users/f_prg/Documents/dev/gom
-->      netbsd/arm: _/Users/f_prg/Documents/dev/gom
-->       plan9/386: _/Users/f_prg/Documents/dev/gom
[f_prg@gom] $ ls
Gomfile                 gom_linux_386           gom_openbsd_amd64
_vendor                 gom_linux_amd64         gom_plan9_386
gom_darwin_386          gom_linux_arm           gom_windows_386.exe
gom_darwin_amd64        gom_netbsd_386          gom_windows_amd64.exe
gom_freebsd_386         gom_netbsd_amd64        main.go
gom_freebsd_amd64       gom_netbsd_arm
gom_freebsd_arm         gom_openbsd_386

goxで生成された実行ファイルを実行してみます

[f_prg@gom] $ ./gom_darwin_amd64
Hello, Gom

まとめ

rubyのbundlerと同様のように、パッケージ管理が簡単になります。

補足、おまけ

https://github.com/mattn/gom
に従うとエラーをしておりました。
サイトに従って作成して用意します。

gom 'github.com/mattn/go-runewidth', :tag => 'go1'
gom 'github.com/mattn/go-scan', :commit => 'ecb144fb1f2848a24ebfdadf8e64380406d87206'

# Execute only in the "test" environment.
group :test do
    gom 'github.com/mattn/go-sqlite3'
end

# Execute only for the "custom_group" group.
group :custom_group do
    gom 'github.com/golang/lint/golint'
end

サイト上では

gom 'github.com/mattn/go-runewidth', :tag => 'go1'

となってましたが、tagがないようなので

gom 'github.com/mattn/go-runewidth'

としました。

参考資料・リンク

https://github.com/mattn/gom

元記事はこちら

go言語の管理ツールのgom (Go Manager)を使う