GoLang

CentoOSにyamを使わず最新のGoを入れる。他、勉強会の話とか。

雑談タイム

六本木ヒルズの広場です〜

ドラえもんがいっぱい〜

この日は women who go 主催のお勉強会にいってきました。

いちお、スタッフもしてますです。新米ですが 🍚

スタッフの皆さん、いつもありがとうございます。今回もとても勉強になりました〜。

本題に入る前に、この日学んだ(お勉強会に来てくれた子達に質問されたのに答えられなかった)こと等を投稿。

defer
defer client.Close()

先日、Go + Cloud Firestoreかいててドキュメントにものってたコレ、エラーになってたのでコメントアウトして調べずにそのままスルーしていたのですが、勉強会で質問されました。

当然答えられず。

ぐぬぬ・・ちゃんとお勉強しておけばよかった。

代わりにお答えいただいた、講師の @tenntennさんと、merpay golang tokyo のGoエンジニアさんありがとうございました。

  • 関数呼び出しをした後に書くもの
  • 処理を予約しておく
  • とある呼び出した関数がおわるときに実行させたい処理を書いておく
ベンダリングとは
  • 特定のバージョンのスナップショットを手元に置くこと
GoModule(vgo)
  • 標準モジュールの管理の仕組み
  • ビルド時の依存関係を解消する
  • ベンダリングが不要なる
  • 新しくモジュールという概念単位でバージョン管理してくれる
  • 互換性がなくなる場合はインポートパスを変えてくれる
  • 古いバージョンを優先してくれる(Minimal Version Selection)
go.mod
  • package.jsonみたいなもの?
  • 依存モジュールをかく
  • バージョンはsemverでかく
  • 特定のコミットも指定可能
  • go modコマンドいろいろ...
  • GoLandでGo Module用のプロジェクトを作ると自動でgo.modファイルを作ってくれる
amd64

これ、今まで読みかたわからんかったのですが「アムド」ってゆってた。

GOPATH
  • プロジェクトをまたいだGOPATHとプロジェクト毎のGOPATHがある
  • プロジェクト毎の〜はあまり使うことはない

お勉強会後、前職がUnityでゲーム作ってたんだよーというmerpayエンジニアさんから、ゲーム開発の裏話など、なるほどー!な話がちょっと聞けて面白かったです。

仮装時計とか、ポイント付与の話とか・・

あと、イラストを描いているtottieさんが遊びにきて、サクサクとイラストを描いてゆかれました。

赤いのは、Kさんと、tenntennさんが描いたやつ。

超カワイイ。掲載許可は、いちお、もらってます〜

私も最近Goperくんを描く練習してます。なかなかツールが使いこなせず・・

それでは、長くなりましたが本題へ...

CentoOSにyamを使わず最新のGoを入れる

いつもyamとか使ってインストールしちゃうけど、今回は公式からゲンブツおとしてやってみました。

参考:https://stupiddog.jp/note/archives/1148

私の知識が足りないばかりに

写経だけでは進められなかったので忘却録です。

  • 公式サイトから最新バージョンをダウンロード
    https://golang.org/dl/
  • /usr/local/ に展開する
    (ビルド済みのものがはいってる)
  • /usr/local/go/bin/ にパスを通す
$ curl -L -O https://dl.google.com/go/go1.12.9.linux-amd64.tar.gz
$ ls
go1.12.9.linux-amd64.tar.gz
$ cd /usr/local
$ ls
bin  etc  games  include  lib  lib64  libexec  sbin  share  src
$ sudo tar -C /usr/local/ -xf ~/go1.12.9.linux-amd64.tar.gz
[sudo] hoge のパスワード:
$ ls
bin  etc  games  go  include  lib  lib64  libexec  sbin  share  src
$ echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bash_profile

とりあえず、ここまでOK。

go getで必要になるコマンドをインストールする(メルカリさんセットのようです)

$ sudo yum install -y git mercurial subversion
$ echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.bash_profile
$ mkdir -p `go env GOPATH`/{src,bin,pkg}
-bash: go: コマンドが見つかりません
-bash: go: コマンドが見つかりません
-bash: go: コマンドが見つかりません
mkdir: ディレクトリ `/src' を作成できません: 許可がありません
mkdir: ディレクトリ `/pkg' を作成できません: 許可がありません

怒られた。

多分

export PATH=$PATH:/usr/local/go/bin
export PATH=$PATH:$(go env GOPATH)/bin

これしたあとにシェルの再起動が必要かと・・

$ bash -l
$ go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/m-kawano/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/m-kawano/go"
:

再度チャレンジ

$ cd $GOPATH
$ pwd
/home/hoge
$ ls
go1.12.9.linux-amd64.tar.gz
$ mkdir -p `go env GOPATH`/{src,bin,pkg}
$ ls
go  go1.12.9.linux-amd64.tar.gz
$ ls go
bin  pkg  src

{src,bin,pkg}

ってうつとまとめて作れるんだ・・
知らなかった。。

で、以降
$ mkdir -p `go env GOPATH`/{src,bin,pkg}
はしなくてよく

あとは、GitHubでリポジトリを作るたびに
$ mkdir -p `go env GOPATH`/[username]/[repository name]
で、作業ディレクトリを作ればいいらしい。
今回は閉じた環境なのでやらないけど。

GOROOTについて

引用:https://stupiddog.jp/note/archives/1148
実行ファイルに埋め込まれた、GOROOTの場所以外にインストールした場合に設定が必要となる。
(Golangでの標準は「/usr/local」だけど提供パッケージにより異なる)

私の環境では以下のように出ました。

$ go env | grep GOROOT
GOROOT="/usr/local/go"

昨日、ちょうどmerpay KさんにGOROOTについて質問したんだけど、「最新バージョンを常に使いたいって時にGOROOTでやったりする人はいる。ぼくはやらいけど」

って言ってました。

ふむふむ。

今日はここまで。

あとは、最新バージョンが出るたびに手動でアップデートする方法が知りたいかも。

 

それではまた。

 

-GoLang