tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【go】goenvとdirenvとGo Modulesとで新しいgo環境をつくる

はじめに

Golang環境は、職場でも数年利用していました。 Macが新しくなった + 日に日に新しくなっているのでこれを機にlocal環境を作りなおしてみるメモです。

アジェンダ

  1. 今回の構成
  2. goenvでgoいれる
  3. direnvでlocal設定する
  4. go modでpackage管理する
  5. 実行してみる

1. 今回の構成

場所はどこでも良いのですが、
以下にsampleをおくと仮定して進めます。

$ cd $HOME/sample

$ pwd
$HOME/sample

2. goenvでgoいれる

goenvは、go言語のバージョンを管理するものです。
rbenvやnodebrewを使ってる人には名前を見たらすぐわかりますね!

goenvのinstall

$ go version
go version go1.12.4 darwin/amd64

$ brew install goenv

$ goenv versions
* system (set by /Users/tweeeety/.goenv/version)

goenvの設定

$ vim ~/.bashrc
-- 追記 --
# for goenv
export GOENV_ROOT="$HOME/.goenv"
export PATH="$GOENV_ROOT/bin:$PATH"
eval "$(goenv init -)"
----------

goenvでgoの任意のversionをインストール

$ goenv install --list
Available versions:
 1.2.2
 1.3.0
 ~ 省略 ~ 
 1.11.3
 1.11.4
 1.12beta1

$ 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/tweeeety/.goenv/versions/1.11.4

# $HOME/sample配下を1.11.4にする
$ goenv local 1.11.4

$ ls -al
total 8
drwxr-xr-x  3 tweeeety  tweeeety   96  6 23 02:47 .
drwxr-xr-x  6 tweeeety  tweeeety  192  6 23 02:46 ..
-rw-r--r--  1 tweeeety  tweeeety    7  6 23 02:47 .go-version

$ cat .go-version
1.11.4

2. direnvでlocal設定する

direnvのinstall

direnvのinstallは以下をご参考ください

direnvの設定

$ pwd
$HOME/sample

$ direnv edit .
-- vi追記 --
export GO111MODULE=on
export GOPATH=$PWD/go
------------

# 念の為
$ direnv allow

3. go modでpackage管理する

package管理には
これまでglideやらdepやらがいましたが、
これからはGo Modulesらしいので使ってみます。

go mod initでgo.modを作る

go 1.12からはデフォルトだけど、
go 1.11ではexport GO111MODULE=onとすることで使用できるようです。

今回は、上記のdirenvにて、
特定のdirに対してはexportするように設定したものですね。

go mod init helloを打つと、
go.modというファイルができます。

$ go mod init hello
go: creating new go.mod: module hello

hello.goを作る

rsc.io/quoteは、 Go Modulesの説明のために作られたパッケージのようなのでそれを使います。

package main

import (
    "fmt"

    "rsc.io/quote"
)

func main() {
    fmt.Println(quote.Hello())
}

go buildでpackageのinstallも行う

go buildを打つと利用しているpackageをinstallまでしてくれます。

$ go build
go: finding rsc.io/quote v1.5.2
go: downloading rsc.io/quote v1.5.2
go: extracting rsc.io/quote v1.5.2
go: finding rsc.io/sampler v1.3.0
go: finding golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c
go: downloading rsc.io/sampler v1.3.0
go: extracting rsc.io/sampler v1.3.0
go: downloading golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c
go: extracting golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c

$ cat go.mod
module hello

go 1.12

require rsc.io/quote v1.5.2

また、この時点で以下のような構成になっています

$ pws
$HOME/sample

$ tree . -L 4
.
├── go
│   └── pkg
│       └── mod
│           ├── cache
│           ├── golang.org
│           └── rsc.io
├── go.mod
├── go.sum
├── hello
└── hello.go

6 directories, 4 files

4. 実行してみる

$ go run hello
こんにちは世界。

無事、実行できました!

おわり

Go Modules便利\(^o^)/