Go
Getting Started
- A Tour of Go … Web上でコードを動かしてGoプログラミングを体験できるチュートリアル
- https://go.dev/ … Gopher向けのポータルみたいなサイト
Install Go
Play Ground
Web上で動作するSandbox環境。
Documentation
- https://golang.org/doc/
- http://golang-jp.org/ … golang.orgの日本語訳プロジェクト
Goを学ぶ
https://learn.go.dev/ に教材がたくさん転がっている。
- Go by Example … 言語仕様や標準パッケージの使い方がハンズオンで学べる
- 邦訳: Go by Example
- CodeReviewComments · golang/go Wiki … Goらしい書き方を学べる
- The Go Programming Language Blog / 公式ブログ
非公式サイト:
- GoのためのGo … オンライン教本 by motemen氏
- Go Language Programs, Tutorial, Articles and Examples
記事
Topics
ディレクトリ構成
https://github.com/golang-standards/project-layout
unofficialだけど、上が最も有名そう。
解説記事:
- Goの標準プロジェクトレイアウトを読み解く - Tech Do | メディアドゥの技術ブログ
- 実例となるリポジトリへのリンクもある
『みんなのGo言語』で紹介されていたサンプルはちょっと違う。
例えば、下の記事で紹介されている:
具体的には、 pkg/
がない。
Songmu/ghgなどもそうなっている。
まあ別にルートディレクトリがごちゃっとならないなら pkg/
を切らなくてもいいのでは、という気がする。
参考:
CLI
小さいCLIで、ライブラリとして提供しないものは、下のような感じでもよさそう:
.
├── internal
│ ├── bar
│ └── foo
└── main.go
https://golang.org/src/cmd/go/ とか割とそんな感じに見える。
build
https://golang.org/pkg/go/build/
Build Constraints
という機能は「build tag」としても知られている。
こんなの:
// (A)
// +build foo
// (B)
// +build !foo
(A) go build -tags=foo
でビルドされる。
(B) go build
でビルドされる。
参考:
WebAssembly対応
2020-05-31記載。
LLVMベースのコンパイラなのでWASMに対応しているというTinyGoの存在をいま知ったところだけど、Go本体も1.11でWASMを実験的にサポートしたそうだ。
GitHub WikiにWebAssemblyのページがある:
Go 1.11 added an experimental port to WebAssembly. Go 1.12 has improved some parts of it, with further improvements expected in Go 1.13.
気になったので、1.13, 1.14のリリースノートを確認した。
https://golang.org/doc/go1.14#wasm
js.Value
オブジェクト(Goから参照されるJavaScriptの値)がガベージコレクションの対象になったとか。
https://golang.org/doc/go1.13#ports
GOARCH=wasm
でWASMコンパイルするとき、 GOWASM
環境変数にカンマ区切りで実験的なフィーチャーリストを指定できるようになった。
有効な値は https://golang.org/cmd/go/#hdr-Environment_variables に記されている。
2020-05-31現在は setconv
, signext
が指定可能。
歴史
ライブラリ管理
dep
「Dep」という依存パッケージ管理ツール。 Go 1.11〜1.13で公式の実験的な扱いだった。
vendoring
アプリケーションなどで、依存パッケージを管理する仕組み。
Go 1.6から正式にサポートされた。
Go 1.5ではexperimental扱いで、有効化するには環境変数 GO15VENDOREXPERIMENT
を設定してコンパイルする必要がある。
vendoringのためのツールとして、glideやgomなどがある。
参考:
- 今更だけどGoのVendoringについて思いをはせる - Qiita
- go vendoring - 隙あらば寝る
- Glide で Go 言語のパッケージ管理と vendoring - Librabuch