はじめに
A Tour of GoでGo言語の基本を学んだので、次は実際に開発するために開発環境を構築してみます!
また、Go Modulesを使ったモジュールの作成も簡単に試しています。
想定環境
Golangのインストール
まずはGo言語自体のインストールです。
bash-3.2$ brew install go
を実行します。
インストールが問題なく完了したら、次はパスを追加します。.bash_profile
に以下を追加します。
(.bashrc
はデフォルトで読み込んでくれないので.bash_profile
を利用)
export GOPATH=$HOME/golang/go export PATH=$GOPATH/bin:$PATH export GO111MODULE=on
反映します。
bash-3.2$ source ~/.bash_profile bash-3.2$ go version go version go1.13.7 darwin/amd64
バージョンが表示されればOKです。
VSCodeのインストール
Virtual Stadio Codeを
https://code.visualstudio.com/
からダウンロードし、インストールします。
VSCodeをGo環境用にカスタマイズする
Go言語を開発しやすくするために、VSCodeのアドオンをインストールします。
Golang開発環境を作成する(module対応) - Ubuntu16.04/VSCode - Qiita
を参考に実施し、$GOPATH配下に色々インストールされていることを確認します。
基本的な開発の方法
さて、これだけで環境の構築自体は終わりです!
が、どういうディレクトリ構成でソースコードやモジュールを作成したら良いのか分からなかったので、実際に試してみました。
hello worldしてみる
$HOME/golang
にて、sampleproject
ディレクトリを作成し、その中にhello.go
ファイルを作成します。
ディレクトリ構成は以下のようになります。
$HOME/golang ├── go │ └── 自動インストールされたいろんなモジュール └── sampleproject └── hello.go
hello.go
の中身は下記のようにします。
package main import "fmt" func main() { fmt.Println("Hello, world.") }
このファイルをVSCodeで作成したら、下のパネルのTERMINAL
にてビルドとランを実行します。
もし、下にパネルが表示されていない場合は、View > Appearance > Show Panel
を選択するか、⌘+J
を押すことで表示させることができます。
ビルドとランを一気に実行するには、
bash-3.2$ go run hello.go Hello, world. bash-3.2$
とします。
ビルドとランを別々のコマンドで実行するには、
bash-3.2$ go build hello.go bash-3.2$ ls hello hello.go bash-3.2$ ./hello Hello, world. bash-3.2$
とします。この場合はバイナリファイル(hello.go)を残すことができます。
モジュールを作成してみる
次は自分でモジュールを作成して、別のコードからimportしてみます。Go Modulesという機能を使います。
Go Modulesについては下記で詳しく解説されていました。
超簡単に要約すると、今まではGoのソースコードは$GOPATHに配置して扱う必要があったらしいですが、Go 1.12以降、Go Mudulesという機能が用意され、$GOPATH外にあっても扱えるようになったらしいです。
今回は、$GOPATHを $HOME/golang/go
に設定していますが、sampleproject
ディレクトリは$GOPATHの外にあるので、そのままsampleproject
ディレクトリの中でモジュールを作成してみます。
まずは$GOPATH外のモジュールでも呼び出せるようにするためにgo mod
コマンドを使って初期化します。
go mod init <モジュールをimportするときの文言>
として初期化することで、同階層にgo.mod
ファイルが作成されます。これで$GOPATH外でもimportできるようになるようです。
実際にやってみます。
bash-3.2$ pwd $HOME/golang/sampleproject bash-3.2$ bash-3.2$ go mod init github.com/hoge-username/sampleproject go: creating new go.mod: module github.com/hoge-username/sampleproject bash-3.2$ ls go.mod hello hello.go bash-3.2$ cat go.mod module github.com/hoge-username/sampleproject go 1.13 bash-3.2$
通例として自作モジュールの場合は リポジトリURL/アカウント名/リポジトリ名
を指定してinitした方が分かりやすくなるようです。
今回は、
go mod init github.com/hoge-username/sampleproject
としてinitしました。こうすることで、
github.com/hoge-username/sampleproject
が自作moduleをimportするときに指定するPathとなります。
例えば、sampleproject/calc/add.go
を作成しhello.goからimportする場合を考えてみます。
add.goおよびhello.goは下記のように作成します。
add.go
package calc // Add arg1 and arg2 func Add(x, y int) int { return x + y }
hello.go
package main import ( "fmt" "github.com/hoge-username/sampleproject/calc" ) func main() { fmt.Println("Hello, world.") fmt.Println("2 + 3 = ", calc.Add(2, 3)) }
ディレクトリ構成は以下のようになっています。
sampleproject ├── calc │ └── add.go ├── go.mod └── hello.go
これでランすると正常に稼働します。
bash-3.2$ go run hello.go Hello, world. 2 + 3 = 5 bash-3.2$
おわりに
これでGo言語を開発する環境を整え、開発の基本的な方法も理解できました。