sagantaf

メモレベルの技術記事を書くブログ。

Go言語の開発環境をMacとVScodeで作りコードを動かしてみる

はじめに

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を押すことで表示させることができます。

f:id:sagantaf:20200208220412p:plain


ビルドとランを一気に実行するには、

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 Modules - Qiita

超簡単に要約すると、今までは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言語を開発する環境を整え、開発の基本的な方法も理解できました。