NoahOrblog

某・福島にある大学のコンピュータ理工学部の大学生のお話。

Golang覚書

Noahです

Golangを触る機会があったので備忘録も兼ねて残しておきます

というかぶっちゃけ、

みんなのGo言語【現場で使える実践テクニック】

みんなのGo言語【現場で使える実践テクニック】

この本の覚書が多いです

$GOPATH と $GOROOT

そもそもここからわかっていなかった。

$GOPATHとは、Golangソースコードなどを置くワークスペース

基本どこでもいいらしいが、自分は$HOME/go/ディレクトリにしておいた。

その下にsrc/を配置、その中に各プロジェクトを置いたりする。

githubなんかからgo getした際には$GOPATH/src/github.com/<USER NAME>/<REPOSITORY>のように置かれる。

$GOROOTはGolangのインストールパス。昔は指定する必要があったみたいだが、今は不要のようだ。

vendor

RubyでいうところのBundlerみたいなものがGolangにもある。

それがglide

brew install glideで入手可能。

使い方は簡単で、対象のプロジェクトディレクトリで

$ glide init

とすればglide.ymlができて、自動で依存関係共々そこに記述される。

その後に

$ glide update

とすれば、glide.lock, vendor/ディレクトリが生成され、その中に依存するパッケージなどが配置される。

ディレクトリ構成

以下のようにしている。

project/
  ├ main.go     -- package main
  ├ lib/
  │  └ pkg1/
  │    └ pkg1.go    -- package pkg1
  ├ glide.yml
  ├ glide.lock
  └ vendor/    -- 依存パッケージなど 

ちなみに、$GOPATH/github.com/<MY USER ID>/<PROJECT NAME>/で管理することで、実際にGithubなどにあげたときと同じ環境で出来る。

main.go内でlib/内のパッケージをimportする際にも、このディレクトリ構成なら、import "github.com/<MY USER ID>/<PROJECT NAME>/lib/<PKG NAME>"でいけちゃうので楽。

最後に

Golangを、「Gopher君、超かわいい!!」くらいにしか思ってなかったが、今回触ってみてやはり他言語と比べて割りとシンプルだという印象を受けた。

ろくに書けるわけでは無い(A Tour of Go を一通りやっただけ)のに「みんなのGo言語」を読んで少し駆け足気味だったのでもう少し基本的なところから復習しがてら何か成果物を作っていけたらな、と思います。