Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

[Go] MacでGo言語環境構築

はじめに

Go言語の環境構築が色々と面倒だった
(特に$GOPATHとか$GOPATHとか$GOPATHとか)ので自分がやった手順をまとめました。
Macで環境構築しましたが、WindowsやLinuxの場合も参考になると思います。

環境

  • macOS 10.15.4 Catalina
  • goenv 2.0.0beta11

goenvのインストール

goenvはPythonでいうpyenvとかNode.jsのnodenvのようにバージョン切り替えができるようにしてくれます。
Homebrewでインストールするとgoenvの古いバージョンがインストールされてしまったので、
GitHubリポジトリに記載された方法を採用しました。

まずはリポジトリをクローン

git clone https://github.com/syndbg/goenv.git ~/.goenv

次にgoenvの初期設定します。

  • bashの場合
$ echo 'export GOENV_ROOT="$HOME/.goenv"' >> ~/.bash_profile
$ echo 'export PATH="$GOENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(goenv init -)"' >> ~/.bash_profile
  • zshの場合

~/.bash_profileの代わりに~/.zshenvあるいは~/.zshrcに設定すればいいですね。
~/.bash_profileもそうですがこの辺りは宗教もあると思うのでノーコメントで...

$ echo 'export GOENV_ROOT="$HOME/.goenv"' >> ~/.zshenv
$ echo 'export PATH="$GOENV_ROOT/bin:$PATH"' >> ~/.zshenv
$ echo 'eval "$(goenv init -)"' >> ~/.zshenv

シェルを再起動

$ exec $SHELL

goenvが使えるようになっているか確認
見たとおりbeta版のバージョンですが今の所問題が起きてないので今回はスルーします。

$ goenv -v
goenv 2.0.0beta11

Goのインストール

まずはインストールできるバージョンを確認

$ goenv install -l
Available versions:
  1.2.2
  1.3.0
  1.3.1
  ...
  1.14.1
  1.14.2
  1.14.3
  1.14.4
  1.14.5
  1.14.6
  1.14.7
  1.15.0

今回は記事執筆時点での最新版1.15.0をインストールします。

$ goenv install 1.15.0

次にGOPATHとGOROOTの設定

bashの場合

$ echo 'export PATH="$GOROOT/bin/$PATH"' >> ~/.bash_profile
$ echo 'export PATH="$PATH:$GOPATH/bin"' >> ~/.bash_profile

zshの場合

$ echo 'export PATH="$GOROOT/bin/$PATH"' >> ~/.zshenv
$ echo 'export PATH="$PATH:$GOPATH/bin"' >> ~/.zshenv

この時点で~/.bash_profile(または~/.zshenv, ~/.zshrc)は以下のようになっていると思います。

export GOENV_ROOT="$HOME/.goenv"
export PATH="$GOENV_ROOT/bin:$PATH"
eval "$(goenv init -)"
export PATH="$GOROOT/bin:$PATH"
export PATH="$PATH:$GOPATH/bin"

で、最後に

$ goenv global 1.15.0

とするとgoコマンドが使えるようになります。

$ go version
go version go1.15 darwin/amd64

本来はGo言語のソースコードは全て環境変数$GOPATHで設定したディレクトリの直下で作成する
という原則があります。
しかし、go 1.11からgo modulesが導入されたことで$GOPATHの外でGoのプロジェクト開発が
できるようになりました。
そこでその設定をしておきます。まずはgo envで環境変数GO111MODULEを確認をします。

$ go env GO111MODULE
on

このときの出力がonになっていれば設定の必要はありませんが、
offまたは設定がなかった場合は設定します。

$ go env -w GO111MODULE=on
$ go env GO111MODULE        
on

サンプルプログラムの作成

足し算の結果を表示するプログラムを作成します。
引数が足りないことによるpanicの処理はここでは無視します。

$ ./hoge 1 3
4

ディレクトリ構造は以下のようになります。

$ tree sample-proj 
sample-proj
├── add
│   ├── add.go
│   └── go.mod
├── go.mod
└── main.go

まずは下準備。

$ mkdir sample-proj && cd $_
$ go mod init sample-proj

次にsample-projディレクトリの下でaddディレクトリを作成し、ここにAdd関数を作成します。

$ mkdir add && cd $_
$ go mod init add

そしてadd.goの作成。

package add

// Addをaddとしてしまうと外部(ここではmain.go)から参照できない
// 外部から参照する変数や関数は大文字から始める
func Add(a, b int) int {
    return a + b
}

次にsample-projディレクトリに戻ってきてmain.goを作成します。

package main

import (
    "fmt"
    "os"
    "sample-proj/add"
    "strconv"
)

func main() {
    a, _ := strconv.Atoi(os.Args[1])
    b, _ := strconv.Atoi(os.Args[2])
    fmt.Println(add.Add(a, b))
}

これだけではビルドの際に怒られるので、sample-proj/go.modを編集します。
replace sample-proj/add => ./addとしてmain.goaddモジュールを参照できるようにします。

module sample-proj

go 1.15

replace sample-proj/add => ./add

これで準備ができたのでビルドします。

$ go build -o hoge main.go
$./hoge 1 3
4

これでGoの最低限の環境を構築して、プログラムを書ける状態になりました。

参考記事

ncdc
NCDC株式会社は、新規サービスの企画からデザイン、システム開発までを一元的に行う、日本発のデジタルイノベーションファームです。
https://ncdc.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away