2022-05-23
以下の GOPATH と dep を使ったパッケージ管理は古いので更新
Go をインストールもしくは、最新にする
brew install go # Go 1.18
他の依存管理ツールは不要
cd bots/rss
go mod init github.com/kurosame/bots-go/bots/rss
go.mod
が作成される
import に依存パッケージを記載
import ( "github.com/joho/godotenv" "github.com/slack-go/slack" )
go mod tidy
go.sum
が作成される
go.mod
はパッケージのバージョンやパスが記載されている
go.sum
はパッケージのチェックサムが記載されている(パッケージをインストールした時と完全に同じことを担保する)
go.mod
とgo.sum
は GitHub 管理した方がよい
https://github.com/golang/go/wiki/Modules#releasing-modules-all-versions
複数のバージョンのGoをインストール
https://go.dev/doc/manage-install
go install golang.org/dl/go1.16.15@latest ~/go/bin/go1.16.15 download ~/go/bin/go1.16.15 version
~/go/bin
を PATH に通しておくとよい
IntelliJ で Go を書こうと思ったが、Community 版なので Go プラグインが古いのしか無かった
なので VSCode で書こうと思って環境構築しました
けっこう色々必要かなと思って構築したので、メモっておきます
goenv
Go のバージョン管理を行うツール
Go のバージョンを簡単に切り替えることができる
brew install goenv
以下を追加
# ~/.config/fish/config.fish # goenv set -x PATH $HOME/.goenv/shims $PATH
source ~/.config/fish/config.fish goenv install 1.11.4 goenv global 1.11.4 go version
direnv
ディレクトリごとに環境変数を切り替える
例えば GOPATH をディレクトリごとに変えることができる
⇒ 私の場合はghqを使っているので、ghq 配下のリポジトリごとに GOPATH を変えれるのが便利でした
brew install direnv
以下を追加
# ~/.config/fish/config.fish export EDITOR=vim # これを設定してないと`direnv edit`でエラーになる # direnv eval (direnv hook fish)
source ~/.config/fish/config.fish direnv edit .
EDITOR 環境変数で設定したエディタが開くので、以下を追加
export GOPATH=$(pwd)
GOPATH を今のディレクトリにするって感じです
dep
公式のパッケージ管理ツール
brew install dep
dep は$GOPATH/src/project
というディレクトリ構成にしないといけないらしい
※ project は任意の名前を付けてください
mkdir src/default cd src/default dep init
結果 GOPATH 配下は、以下のようなディレクトリ構成になる
(なんかキモい構成だけど我慢しよう…)
. ├── .envrc ├── .gitignore ├── pkg │ └── dep │ └── sources └── src └── default ├── Gopkg.lock ├── Gopkg.toml └── vendor
pkg/dep は dep のキャッシュで vendor に実際使ってるパッケージが入る
src/default 配下が作業ディレクトリになる
以下のように外部パッケージが必要な import があれば
import ( "github.com/pkg/errors" )
以下を実行するだけで、依存解決しつつ vendor ディレクトリにインストールしてくれる
dep ensure
依存を確認する場合は、Gopkg.lock
を見るかdep status
を実行すると良いです
VSCode
とりあえずGo 拡張プラグインをインストールする
このプラグインは色々外部パッケージが必要なので、go get
でインストールする
(たぶん VSCode の Notification でインストールを促すメッセージが出てると思います)
npm 慣れしてる私からすると Lint やコードフォーマッターなどの開発専用系のパッケージも依存管理するものだと思っていたが、dep がたぶんプログラムに import したパッケージのみを管理するようなので、それに従って開発専用系のパッケージはgo get
でインストールする
また、dep 管理しているパッケージは認識してくれないので、VSCode の settings.json に以下を追加して、再起動
"go.gopath": GOPATHを設定
複数リポジトリで settings.json を使い回すことを想定していれば、"go.gopath": "${workspaceFolder}"
などにした方が良いでしょう
最終的に、以下のようなディレクトリ構成になった
(なんかさらにキモい構成になった気がする…)
. ├── .envrc ├── .gitignore ├── bin -> `go get`したやつのバイナリ ├── pkg └── src ├── default │ ├── Gopkg.lock │ ├── Gopkg.toml │ └── vendor ├── github.com -> `go get`したやつ └── golang.org -> `go get`したやつ
Go 開発はかなり久しぶりなので、開発しながら良い構成を考えていきたいと思います
今回の作業リポジトリ ↓ github.com
また、これから作るアプリケーションのディレクトリ構成は以下を参考にしようかなと思ってます github.com