Goの開発環境を整える

2019-08-14 2019-08-15
  1. goenvのインストール
  2. goのインストール
  3. Emacsの設定
  4. 実行してみる

環境

以下の環境を構築する想定です。

  • Mac OS X mojave
  • zsh
  • Emacs 26
  • goenv
  • go 1.11.4

goenvのインストール

brewを使っているので、簡単にインストールできる。
以下のリポジトリにインストール方法が書いてある。
syndbg/goenv

$ brew install goenv
$ goenv --version
goenv 1.23.3

以下を~/.zshrcに追記して、source ~/.zshrcを実行して設定を読み込む。
別のシェルを使っている場合は、合わせてください。

if which goenv > /dev/null; then eval "$(goenv init -)"; fi

goのインストール

以下のコマンドで、goenv でインストールできるgoのバージョンを確認。

$ goenv install --list

現時点で一番新しそうな1.11.4をインストールする。

$ goenv install 1.11.4
Downloading go1.11.4.darwin-amd64.tar.gz...
-> https://dl.google.com/go/go1.11.4.darwin-amd64.tar.gz
Installing Go Darwin 64bit 1.11.4...
Installed Go Darwin 64bit 1.11.4 to /Users/mani/.goenv/versions/1.11.4

インストールしたgo 1.11.4をグローバルで使うように設定する。

$ goenv global 1.11.4

go のバージョンを確認する。

$ go version
go version go1.11.4 darwin/amd64

Emacsの設定

今回は、最低限のgo-modeの設定を行いました。
僕は、Emacsのパッケージ管理にuse-packageを使っているので、以下を追記して終わりです。
gofmt-before-saveをフックしておくと、保存した時に自動で整形してくれるらしい。

(use-package go-mode
  :mode (("\\.go$" . go-mode))
  :init
  (add-hook 'before-save-hook #'gofmt-before-save)
  :config
  (setq indent-tabs-mode nil)
  (setq c-basic-offset 4)
  (setq tab-width 4))

実行してみる

簡単なスクリプトを実行してみます。
hello-goというディレクトリを作成し、hello.goを作成します。
hello.goの中身は以下です。

// hello-go/hello.go
package main

import (
    "fmt"
)

func main() {
    fmt.Println("Hello Go!")
}

go runでソース直接実行します。

$ go run hello.go
Hello Go!

go buildするとコンパイルしてバイナリを作成できます。

$ go build hello.go
$ ls
hello       hello.go
$ file hello
hello: Mach-O 64-bit executable x86_64
$ ./hello
Hello Go!