Go

Getting Started

  • A Tour of Go … Web上でコードを動かしてGoプログラミングを体験できるチュートリアル
  • https://go.dev/ … Gopher向けのポータルみたいなサイト

Install Go

Play Ground

https://play.golang.org/

Web上で動作するSandbox環境。

Documentation

Goを学ぶ

https://learn.go.dev/ に教材がたくさん転がっている。

非公式サイト:

記事

Topics

ディレクトリ構成

https://github.com/golang-standards/project-layout

unofficialだけど、上が最も有名そう。

解説記事:

『みんなの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

https://golang.github.io/dep/

「Dep」という依存パッケージ管理ツール。 Go 1.11〜1.13で公式の実験的な扱いだった。

vendoring

アプリケーションなどで、依存パッケージを管理する仕組み。
Go 1.6から正式にサポートされた。
Go 1.5ではexperimental扱いで、有効化するには環境変数 GO15VENDOREXPERIMENT を設定してコンパイルする必要がある。

vendoringのためのツールとして、glideやgomなどがある。

参考:

Child Pages