仕事では、ログインしたりチャットしたり、ニュースを取得したり動画を見たりと、サーバー連携するiOSアプリはたくさん作ってきました。
でも、作ったことないんです。
サーバーサイド。
わかんないんです。
サーバーサイド。
サーバーエンジニアがいたので、各々よーいドンで開発 → 完成した API の仕様書もらう → アプリに組み込む って流ればかりで。
連携するための知識しかない状態でした。最低限もいいところ。笑
今後やらなきゃなーくらいの気持ちでしたが、ある事件がキッカケで、サーバーがほぼ必須の状況になったので、これを機に学ぼうと。
そこで選んだ言語が Go言語 でした。
そんなわたくし、意気揚々とGo言語の扉を叩くも門前でゲロ吐きそうになったので、同じ境遇の人がいたら(いるんか)と思い、記事にしました。
後々カンタンな方法があることを知ったので、両方記載しています。
これからやるぞ!と思っている方、ぜひ一緒に ᕕ( ᐛ )ᕗ<ユル-ク
開発環境
・macOS Catalina 10.15.5
・Homebrew(説明しないので、準備してください)
・go version 1.14.4(Homebrew を使ってインストールしていきます)
IDE(統合開発環境)について
Go言語の IDE は選択肢が多いです。
様々なエディタでプラグインがあるため、好きなものでいいと思います。
・Atom
・CotEditor
・Emacs
・GoLand
・Terminal
・VisualStudioCode(VSCode) ※アルファベット順
だいたいこんな感じですかね。
私は VisualStudioCode で開発しているので、今後のGo言語関連の記事も VisualStudioCode を使っての説明になると思います。
オススメのエディタやら構築手順を書いたら膨大な記事になるので、各自で好みのエディタをインストールしてご準備ください。
サンプルコードを作る
エディタの準備はできましたかー?
環境構築前にサンプルコード?って方もいると思いますが、この記事の構成的に、先にサンプルコードを作成します。
※ GOPATH と モジュール の両設定を記載しているので
エディタで hello.go というファイルを作ります。
中身はありきたりなやーつですが、以下をコピってくださいまし ( ̄・ω・ ̄)
1 2 3 4 5 6 7 |
package main import "fmt" func main() { fmt.Printf("Hello World!") } |
ファイルを保存したら、ここでエディタを離れます。
後ほどターミナルで保存先に移動したりするので、保存場所は忘れずに!笑
いよいよ Go のインストール
Go言語を使うにあたって、まずはインストールから行います。
インストールは homebrew を使います。
ターミナルを開いて、
1 |
$ brew install go |
を実行しましょう。インストールが始まります。
完了後は、インストールされているか確認のため、以下のコマンドを試してください。
1 2 |
$ go version go version go1.14.4 darwin/amd64 // こんな感じでバージョンが表示されたらOK |
普通にダウンロードもできるのでお好みで。
※この記事では homebrew を前提として進めます
モジュールを設定する(推奨)
他のブログや書籍もそうなのですが、GOROOT や GOPATH を設定する内容が出てきます。
ピュアな私はそれに倣い、パスを設定すべく奮闘しました。
ゲロ吐きそうになりながらも設定したのですが、後々発覚しました。
モジュールという機能を使うことで、GOPATH が不要になるということを。
公式Wiki にこのような記述があります。
In Go 1.14, module support is considered ready for production use, and all users are encouraged to migrate to modules from other dependency management systems.
ver1.11 からモジュール機能を提供してきたけど、ver1.14 から本番環境での使用を推奨します!
すべてのユーザーは、他の依存関係管理システムから移行することを推奨しまーすって仰ってます。
最近まで推奨されてなかったんなら仕方ない…と思いつつ、とても悲しくなりました。笑
これからはこの方法が主流になると思う&めっちゃ簡単なので、いざ設定!
環境変数を設定する
GOPATH と MODULE を切り替える環境変数 $GO111MODULE というものがあります。
3つの動作が設定されているので、軽く説明します。
on : コードの場所にかかわらず、MODULE で動作
off : GOPATH で動作
auto : $GOPATH/src 以下にあるコードは GOPATH、それ以外にあるコードは MODULE で動作
常時 MODULE を使うようにするために、ターミナルで以下の設定します。
1 2 |
$ echo 'export GO111MODULE=on' >> ~/.zsh_profile // モジュールに切替 $ source ~/.zsh_profile // zsh_profileを更新 |
最低限の「動かす」という設定としてはこれだけです。マジ神。
ビルドする
先ほど作ったサンプルコードのファイル保存先に移動してからビルドします。
ここでは「書類」の中の「SampleProject」に「hello.go」を保存したと仮定します。
1 2 3 4 5 |
$ cd ~/Documents/SampleProject // hello.go の保存先フォルダへ移動 $ go mod init // MODULE を使うための初期化コマンド $ go build hello.go // ビルド $ ./hello.go // 実行 Hello World! |
以上となります!
Hello World! 表示されましたか?
2行目の go mod init ですが、この初期化コマンドを実行すると、go.mod というファイルが作成されます。
「環境構築」が目的なので、このファイルについては別記事で。
一応これで環境構築は終わりですが、便利なパッケージがあったりするので、別記事で紹介します!
次は GOPATH に関する記載なので、閉じてもらって結構です。笑
GOPATH を設定する(非推奨)
ゲロ吐きそうになりながら設定した方法です。
学んだことを残したいだけです…笑
GOROOT
これは Go のインストールパスのこと。
環境変数 $GOROOT として定義されているので、以下のコマンドで確認してみましょう。
1 2 |
$ go env GOROOT /usr/local/opt/go/libexec // 履歴消して正確なパスわからないんで、雰囲気だけ... |
「ほーん、こんなパスかー」と思った方、このパス、間違っております!笑
homebrew でインストールした場合はパスの変更が必要になります。
1 2 3 4 5 6 7 8 9 10 11 |
// libexecを検索 $ find /usr/local/Cellar/ -name libexec /usr/local/Cellar/python... // こんなんだったり... /usr/local/Celler/git... // こういうのも出てくるかもしれませんが... /usr/local/Cellar/go/1.14.4/libexec // これを使用します // 環境変数にGOROOTを追加 $ echo 'export GOROOT=/usr/local/Cellar/go/1.14.4/libexec' >> ~/.zsh_profile // zsh_profileを更新 $ source ~/.zsh_profile |
$GOROOT 以下の bin の中には、go, godoc, dofmt の実行バイナリが配置されます。
GOPATH
ワークスペースのことで、外部パッケージのファイルなども保存されるパス。
環境変数 $GOPATH として定義されているので、これも go env で確認してみましょう。
1 2 |
$ go env GOPATH $HOME/go |
$HOME/go が標準パスになっており、配下には bin, pkg, src という3つのディレクトリがあります。
src : コードを配置(先ほどのサンプルコードもここで管理しないといけない)
pkg : コンパイル後に生成されるファイル
bin : コンパイル後に生成される実行可能ファイル
サンプルコードを移動する必要が出てきました。
環境構築の確認のため、ひとまず src に移動($GOPATH/src/hello.go)させます。
br>
br>
…
br>
br>
ここで思ったんです。
br>
br>
「どうやってプロジェクト管理しよう…今後のためにも今調べてみるか…」と。
br>
br>
そしてモジュールという機能に出逢いました。笑
(もちろん dep にも挨拶済みです)
br>
br>
本題に戻りますが、$GOPATH 以下の bin の中には、Go の実行バイナリが配置されるので、これも環境変数に追加しておきましょう。
1 2 3 4 5 6 |
// 環境変数にGOPATH,PATHを追加 $ echo 'export GOPATH=$HOME/go' >> ~/.zsh_profile $ echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.zsh_profile // zsh_profileを更新 $ source ~/.zsh_profile |
~/.bash_profile → ログイン時にのみ実行される
~/.bashrc → 対話モードの bash 起動時に毎回実行される
「どちらでも OK です」みたいな記事が多いので、そこは注意してください。
環境変数は毎回実行されなくてもいいので、bash_profile に記載しましょう。
※「bash」の方が目にすると思ったので、補足説明のみ例として出しましたが、この記事のシェルは「zsh」です。
修正後のパスを確認
ターミナルを開いてパスが変更されているか確認しましょう!
1 2 3 4 5 6 7 8 9 |
$ go env GO111MODULE="" GOARCH="amd64" GOBIN="" . . GOROOT=/usr/local/Cellar/go/1.14.4/libexec // GOPATHも変わっているか確認してください . . |
ズラーっと出てくる中に GOROOT と GOPATH があるので、両方変わっていれば OK です。
※ $PATH は go言語関連ではないので、go env では出ません。
1)システム環境設定を開く
2)ユーザとグループを選択
3)ウィンドウ左下の鍵アイコンからロックを解除
4)ログイン中のユーザーを右クリック → 詳細オプション を選択
5)ログインシェルの項目を確認
/bin 以下はどうなっていますか?
macOS Catalina からは、標準のシェルが「zsh」になってます。
「bash」やその他シェルになっていないか、確認してください。
はい、設定はこれで以上になります。
br>
br>
_:(´ཀ`」 ∠):_
br>
br>
どうですか、この鬼のような設定。
本当 MODULE が実装されないバージョン1.10以前から使ってる人、神かな?って思いました。
ビルドに関しては、移動先を適宜変更した状態で、先ほど説明した MODULE のビルドの初期化コマンドをしないだけです。
さいごに
以上、GOPATH と MODULE 別の環境構築紹介でした!
先ほども言いましたが、Go言語は開発に便利なパッケージがたくさんあるので、次はそれをインストールしていこうと思います!
コメント