Go 1.11の中心的な機能はWebAssemblyとモジュールの2つだが、いずれも実験段階に留まっている。
モジュールはGOPATH
の代替手段として、プロジェクトの依存関係の特定とバージョニング管理を提供するものだ。モジュールが存在する$GOPATH/src
以外のディレクトリ内でgo
コマンドが実行された場合にはモジュールが有効になり、それ以外ではGOPATH
が使用される。GoogleのRuss Cox氏が説明している。
Goモジュールはモジュールパスと呼ばれる、共通のインポートパスプレフィックスを共有するパッケージのコレクションです。モジュールはバージョニングの単位でもあり、モジュールのバージョンはセマンティックバージョン文字列で記述されます。Gitで開発する場合、モジュールのGitリポジトリにタグを追加することで、モジュールの新たなセマンティックバージョンが定義されます。セマンティックバージョンを強く推奨していますが、指定したコミットの参照もサポートされます。
モジュールはgo mod
を使って生成され、そのバージョン番号のパッケージが必要とするパッケージをすべてリストアップしたgo.mod
ファイルを、モジュールのルートに置くことで定義される。これはgo mod -init -module example.com/m
で生成したもので、モジュールのベースディレクトリと2つの依存ファイルの定義された、ごく単純なモジュール定義ファイルの例である。
module example.com/m
require (
golang.org/x/text v0.3.0
gopkg.in/yaml.v2 v2.1.0
)
go.mod
ファイルが生成されれば、後はgo build
、go test
、go list
といったコマンドが、インポートを満足するように新たな依存関係を自動的に追記してくれる。例えば、メインパッケージでrsc.io/quote
をインポートしている場合、go run
を実行することで、require rsc.io/quote v1.5.2
がgo.mod
に追加される。同様にgo get
コマンドは、go.mod
を更新してビルドに使用されるモジュールのバージョンを変更するので、依存関係を再帰的にアップグレードないしダウングレードすることが可能だ。
モジュール構文の詳細はgo help modules
で確認できる。Goチームが互換性の維持に努力しているため、この機能は、少なくともGo 1.12までは試験段階に留まる予定である。モジュールが安定した時点で、GOPATHによる作業サポートは削除される。
WebAssemblyのサポートは、Webブラウザ内でGoプログラムを実行可能にするためのものだ。GOARCH=wasm GOOS=js go build -o test.wasm main.go
を実行して、Webで動作するGoプログラムをコンパイルすると、wasm_exec.html
, wasm_exec.js
, test.wasm
という3つのファイルが生成され、HTTPサーバにデプロイするか、あるいはブラウザに直接ロードすることができる。js
パッケージを使用したDOM操作も可能だ。
Go 1.11の変更点の全リストは、公式リリースノートで確認して頂きたい。 利用可能なダウンロードのリストはこちらにある。
この記事を評価
- 編集者評
- 編集長アクション