三蔵開発メモ

Web開発やインフラ関連のメモを共有します

Go 1.12 のローカル環境構築、Modulesを使えるようになるまで(MacOS版)

概要

  • mac OS 10.14
  • Homebrewインストール済み

Homebrewでgoをインストール

brew update
brew install go
go version
(go version go1.12.4 darwin/amd64)

goenvもいれる

brew install goenv
vi ~/.bash_profile

bash_profileに以下を追加

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

詳しい使い方はここを参考にしました。

qiita.com

バージョンをbrewで入れたものに戻したい場合は、

goenv global system

と入れる。

GOPATH設定

bash_profileに以下を追加

export GOPATH=$HOME/go

この場合は、ホームフォルダ直下にgoというフォルダを作って、その下がGOPATHになる。
必要に応じて好きな場所に変えても問題ないです。

modulesを使う

go1.12だとデフォルトでmodulesが使えるようになっている。

適当な場所でフォルダを作り、その中で、

go init

すると、go.modフォルダが作られる。 あとはimport文に適当なライブラリを書いて、

go build

すると自動で持ってきてくれる。go getしてもOK。

具体例

たとえば、

github.com

上記のライブラリを使いたいとき、以下のようなソースコードをmain.goに書くとする。

package main

import (
    "fmt"
    "github.com/julienschmidt/httprouter" // これが使いたいgo getも特にしていないライブラリ 
    "net/http"
    "log"
)

func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
    fmt.Fprint(w, "Welcome!\n")
}

func Hello(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
    fmt.Fprintf(w, "hello, %s!\n", ps.ByName("name"))
}

func main() {
    router := httprouter.New()
    router.GET("/", Index)
    router.GET("/hello/:name", Hello)

    log.Fatal(http.ListenAndServe(":8080", router))
}

そして、以下を実行すると自動で上記ライブラリを持ってきてくれる。

go build main.go

※go.modファイルには上記ライブラリが追加されている。