【第8回】Go言語(Golang)入門~環境見直し編~
IT技術
第8回~Go言語(Golang)入門~
(株)ライトコードの笹川(ささがわ)です!
前回は、TwitterAPI を利用し、HTMLテンプレートでエゴサーチの結果を表示しました。
今回は、なんと、Goの環境やパッケージ管理を見直していきます!
それでは、いってみましょう!
前回の記事はこちら
環境の見直し
1回目の記事を書いた際に、弊社のメンバーから
「どうせだったら brew とか goenv で導入してみればよかったのに」
…というお言葉を頂いたので、折角なので、goenv で go の環境構築をやりなおしてみることにしました。
goenvとは
goenvとは、rbenv をベースとしたGo言語(Golang)のバージョン管理ツールです。
brew経由でインストールでき、バージョンを指定してインストール出来ることから、チーム開発や複数の環境での開発をしたいときに有用です。
goenvを導入してみよう
Go言語(Golnag)のバージョン1.13は、2019/10/2時点で、goenv の master には入っていないようなので、--HEADをつけてインストールします。
1brew install --HEAD goenv
PATHを通す
PATH を通します。
1echo 'export PATH=$HOME/.goenv/bin:$PATH' >> ~/.bash_profile
2echo 'export GOENV_DISABLE_GOPATH=1' >> ~/.bash_profile
3echo 'eval $(goenv init -)' >> ~/.bash_profile
ターミナルで PATH を読み直します。
1source ~/.bash_profile
インストール
Go言語(Golnag)のバージョン1.13をインストールします。
1goenv install 1.13.0
端末全体で使う Go言語(Golang)のバージョンを1.13に指定します。
1goenv global 1.13.0
GOPATH 等は、第1回目で設定したものと同じなので割愛します。
これで、goenv の導入は完了です。
なお、インストーラー経由でインストールしたものを、アンインストールしたい場合はこちらのドキュメントを参考にしてください。
第1回目の記事はこちら
2019.09.13【第1回】Go言語(Golang)入門~環境構築編~第1回~Go言語(Golang)を習得したい!~笹川先生(株)ライトコードでモバイルアプリケーション開発をしている笹川...
パッケージ管理見直し
1回目の記事を書いた際に、こんな「はてなブックマークのコメント」を頂きました。
【第1回】Go言語(Golang)入門~環境構築編~ – 株式会社ライトコード
Go 1.13を使うなら、depではなくて標準のGo Modulesを使ってみては?
なので、今回はパッケージ管理ツールを、dep から Go Modules に変更してみたいと思います。
depを削除する
まずは、Gopkg.toml と Gopkg.lock を削除します。
1rm -f Gopkg.*
次に、vender ディレクトリを削除します。
1rm -fr vendor
dep のアンインストールをします。
1brew uninstall dep
これで、dep の削除は完了しました。
下記のようにコメントを頂きましたので、もしかするとここの手順は不要かもしれません。
dep→Go modulesはgo mod initでGopkg.*を見て移行してくれるからdep削除の前にinitしたほうが楽かもしれない。2019/10/31
Go Modulesを入れてみよう
ターミナルで main.go がある場所まで移動し、Go Modules の初期化を実行します。
1go mod init
main.go のあるディレクトリ内に go.mod というファイルが作成できていたら成功です。
次に、main.go に簡単な処理を記述します。
1package main
2
3import (
4 "fmt"
5 "rsc.io/quote"
6)
7
8func main() {
9 fmt.Println(quote.Hello())
10}
Go Modules は、dep と異なり、go build コマンドでパッケージを導入してくれますので、go build コマンドを実行します。
1go build main.go
main.go のあるディレクトリに main というファイルが出来ていたら成功です。
実行
それでは、main.go を実行してみましょう。
1$ go run main.go
2こんにちは世界。
成功したようです。
このまま、以前に作成したhello.goの処理を呼び出してみます。
1package main
2
3import "go_example/hello"
4
5func main() {
6 hello.SayHello()
7}
main.go に処理を記述したら実行してみます。
1$ go run main.go
2hello, world
無事に呼び出しができました!
環境構築用のシェルで作ってみよう
複数の環境での goenv を利用することで開発環境構築が容易になったので、環境構築用のシェルファイルを作成してみたいと思います。
setup.sh を作成し、まずはいつもの定型文を追加します。
1#!/bin/bash
ディレクトリ作成
次に、作業用のディレクトリを作成します。
1mkdir -p development/go/src
goenvのインストールとPATH設定
ディレクトリ作成後は、先述の通りに goenv のインストールと PATH設定をします。
1brew install --HEAD goenv
2echo "# golang" >> ~/.bash_profile
3echo export PATH='$HOME/.goenv/bin:$PATH' >> ~/.bash_profile
4echo export GOENV_DISABLE_GOPATH=1 >> ~/.bash_profile
5echo eval "$(goenv init -)" >> ~/.bash_profile
6source ~/.bash_profile
7goenv install 1.13.0
8goenv global 1.13.0
9goenv rehash
GOPATHを通す
次に、GOPATH を通します。
1echo export GOPATH='$HOME/development/go' >> ~/.bash_profile
2echo export PATH='$PATH:$GOPATH/bin' >> ~/.bash_profile
3echo export PATH='$PATH:/usr/local/go/bin' >> ~/.bash_profile
4source ~/.bash_profile
リポジトリからclone
GOPATH を通したら、リポジトリから clone します。
1cd $GOPATH/src
2git clone https://github.com/noriyuki-sasagawa/go_example.git
実行
clone が終わったら、main.go を実行します。
1cd $GOPATH/src/go_example/
2go run main.go
まとめたものはこちらの setup.sh になります。
これで、シェルの作成は完了となります。
Go言語(Golang)の実行環境がない端末で下記を実行すると Hello, World と表示されるはずです。
1sh -c "$(curl -fsSL https://raw.githubusercontent.com/noriyuki-sasagawa/go_example/master/setup.sh)"
第9回につづく!
今回は、環境の見直しで Go言語(Golang)を、パッケージからではなく、goenv 経由でインストールしました。
バージョン管理については、使うコマンドとしては差異はあるものの、明らかに開発効率が悪くなることもないので、今後も Go Modules を利用して行きたいと思います。
なお、今回作成した goファイルは、こちらのリポジトリにて管理しています。
次回の記事はこちら
オススメのGo入門本
こちらの記事もオススメ!
2020.08.08Go言語 特集知識編人気急上昇中のGo言語(Golang)って何だ?実装編Go言語(Golang)入門...
2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...
第1回の記事はこちら
2019.09.13【第1回】Go言語(Golang)入門~環境構築編~第1回~Go言語(Golang)を習得したい!~笹川先生(株)ライトコードでモバイルアプリケーション開発をしている笹川...
ライトコードでは、エンジニアを積極採用中!
ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。
採用情報へ
新潟生まれ新潟育ち本業はモバイルアプリエンジニア。 日々、猫(犬)エンジニアとして活躍中!