golang
Goxによるコンパイルの紹介
GoxMacgolang

はじめに

こんにちは。インフラエンジニアレベル1のf_prgです。
Goxというクロスコンパイルするパッケージがあるので紹介したいと思います。
go言語の管理ツールのgom(Go Manager)を使うの記事で扱っておりましたので、内容はほぼ同じようになります。

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

パッケージを使って、ビルドします

goxを使ってビルドをすると各種プラットフォームの実行ファイルが生成されます。
windowsのexeも作られます。

[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

まとめ

GomとGoxを組み合わせると
パッケージ管理とクロスプラットフォームの構築が容易になりそうです。

補足、おまけ

windowsのexeは、検証しておりません。

参考資料・リンク

https://github.com/mitchellh/gox

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

はじめに

こんにちは。インフラエンジニアレベル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

golang
goenvをセットアップする
Macgoenvgolang

はじめに

こんにちは。インフラエンジニアレベル1のf_prgです。
goenvをセットアップしてみます。goenvはrbenvと同様に、golangのバージョンを管理し使用するものです。

goenvをインストールします

[f_prg@Documents] $ git clone https://github.com/wfarr/goenv.git ~/.goenv
Cloning into '/Users/f_prg/.goenv'...
remote: Counting objects: 73, done.
remote: Total 73 (delta 0), reused 0 (delta 0), pack-reused 73
Unpacking objects: 100% (73/73), done.
Checking connectivity... done.

パスの設定をします

~/.zshrcに記述します。または~/.bashrcですね。
記述後は、sourceコマンドで読むか下の2つのコマンド自体を実行しておきます。

export PATH="$HOME/.goenv/bin:$PATH"
eval "$(goenv init -)"

golangのインストールをします

今回は1.4をえらびました。

[f_prg@Documents] $ goenv install 1.4
  :
省略
  :
[f_prg@Documents] $ goenv versions
1.4

rbenvと同様にgolangを使えるように設定する

[f_prg@Documents] $ goenv global 1.4
Set /Users/f_prg/.goenv/version to use 1.4
[f_prg@Documents] $ goenv rehash
[f_prg@Documents] $ go version
go version go1.4 darwin/amd64

まとめ

これで、golangが使えるようになりました。

参考資料・リンク

https://golang.org/
https://github.com/wfarr/goenv