目次
- goenvをインストール
- goをインストール
- go moduleを初期化
- "Hello World" を表示させるコードを書く
- echoをインストール
- hello.goを実行し、ブラウザにアクセス
#1. goenvをインストール
goのバージョンを管理するツール
rubyでいうところのrbenv
$ brew install goenv
パスを通す
//現在のシェルを確認
$ echo $SHELL
> /bin/bash
- bashの場合 .bash_profileにパスを設定
- zshの場合 .zshrcにパスを設定
$ cd ~ // ホームディレクトリに移動
$ ls -a //カレントディレクトリのファイル等を表示
// 私の場合、 シェルがbashなので、 .bash_profileがなければ作成する
$ touch .bash_profile
$ touch .zshrc // 現在のシェルがzshで、 .zshrcファイルがなければこちらのコマンド
//ファイルにパスを追加する
$ vim .bash_profile
//以下を最後の行に追加
export PATH="$HOME/.goenv/bin:$PATH"
eval "$(goenv init -)"
//設定の変更を反映させる
$ source ~/.bash_profile
#2. Goをインストール
// インストールできるバージョンを確認
$ goenv install -l
// バージョンを指定してインストール
$ goenv install 1.13.1
// インストールできたか確認
$ goenv versions // 現在使用可能なバージョンが表示される
// インストールしたgoのバージョンを適応する
$ goenv global 1.13.1 //全てのディレクトリで1.13.1バージョンが使える
$ goenv rehash
$ go version // 現在設定されているバージョンを確
#3. go moduleを初期化する
$ go mod init app
// ディレクトリ構造
go
├── go.mod //新たに作成される
└── main.go
//このファイルはgit mod init コマンドで自動に生成される
module app
go 1.13
require (
github.com/labstack/echo v3.3.10+incompatible
github.com/labstack/echo/v4 v4.1.17 // indirect
)
#4. "Hello World" を表示させるコードを書く
ディレクトリとファイルを作成
$ mkdir go
$ cd go
$ touch main.go
ファイルの中身を書く
package main
import (
"net/http"
"github.com/labstack/echo"
)
func main() {
e := echo.New()
e.GET("/", func(c echo.Context) error {
return c.String(http.StatusOK, "Hello World")
})
e.Logger.Fatal(e.Start(":1323"))
}
#5. Echoをインストール
$ go get github.com/labstack/echo/v4
#6. main.goを実行
$ go run main.go
go: finding golang.org/x/crypto latest
go: downloading github.com/mattn/go-colorable v0.1.2
go: downloading github.com/mattn/go-isatty v0.0.9
go: downloading github.com/valyala/fasttemplate v1.0.1
...
...
...
____ __
/ __/___/ / ___
/ _// __/ _ \/ _ \
/___/\__/_//_/\___/ v3.3.10-dev
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
O\
⇨ http server started on [::]:1323
// 必要なモジュールがダウンロードされていき、go.sumに依存しているモジュールのファイルツリーのハッシュ値が記録される
//ディレクトリ構造
go
├── go.mod
├── go.sum // 追加される
├── main // 追加される
└── main.go
go.sumの中身
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/labstack/echo v3.3.10+incompatible h1:pGRcYk231ExFAyoAjAfD85kQzRJCRI8bbnE7CX5OEgg=
github.com/labstack/echo v3.3.10+incompatible/go.mod h1:0INS7j/VjnFxD4E2wkz67b8cVwCLbBmJyDaka6Cmk1s=
github.com/labstack/echo/v4 v4.1.17 h1:PQIBaRplyRy3OjwILGkPg89JRtH2x5bssi59G2EL3fo=
github.com/labstack/echo/v4 v4.1.17/go.mod h1:Tn2yRQL/UclUalpb5rPdXDevbkJ+lp/2svdyFBg6CHQ=
github.com/labstack/gommon v0.3.0 h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0=
...
...
...
http://localhost:1323/にアクセスすると"Hello World"と表示される
##もしも、go run main.goで以下のエラーが出てしまったら
すでにポートが使われているプロセスがあるので、そのプロセスを終了させる
____ __
/ __/___/ / ___
/ _// __/ _ \/ _ \
/___/\__/_//_/\___/ v3.3.10-dev
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
O\
{"time":"2020-09-21T04:05:07.089506+09:00","level":"FATAL","prefix":"echo","file":"hello.go","line":"13","message":"listen tcp :1323: bind: address already in use"}
exit status 1
// psコマンドで実行中のプロセスを確認
$ ps
526 ttys000 0:00.29 -bash
2974 ttys001 0:00.09 /bin/bash -l
3636 ttys001 0:00.78 go run main.go
//同じポート番号を使っているであろうプロセスを削除
$ kill -9 3636
#注意点
[GO言語] Depはもう古い GoModulesへ移行しよう
Goの環境設定を調べていると"GOPATHを設定する"記事を結構目にしますが、GOPATHを設定すると色々とエラーが出たのと、もう古いらしいのでGOPATHは設定していません。
#参考
Golangをgoenvを使ってインストールしてみた
【zsh, bash】macでPATHを通す方法 - not found と出てしまったら
よく使う Vim のコマンドまとめ
GolangとEchoでお手軽にAPIサーバを立てる
Go Modules
Address already in use の対処法
以上