Go
ナビゲーションに移動
検索に移動
Goは、Googleの開発したプログラミング言語のひとつです。
Goは、システムプログラミングを念頭に置いて設計された汎用言語です[1]。 強く型付け・ガベージコレクション・・コンカレントプログラミングをサポートしています。 プログラムはパッケージから構築され、その特性により依存関係を効率的に管理することができます。 文法はコンパクトで解析が簡単なため、統合開発環境などの自動ツールで簡単に解析することができます。
尚、公式サイトのドメイン名 golang.org から golang と表記される場合もありますが、このプログラミング言語の正式名称は Go です。
目次[編集]
- チュートリアル篇
- 環境構築
- 実行の方法 — Hello, World
- 文法の概要
- 変数と型変換
- 算術演算と数学関数
- 条件分岐と繰り返し — if, switch, select, for, break, continue, return
- 関数
- メソッドとインターフェース
- 再帰的関数呼出し
- メソッドチェイン
- defer,panicとrecover
- 並行処理
- 配列型とスライス型
- マップ型
- 構造体型と構造体スライス
- Goのプログラムがどんなアセンブリにコンパイルされるか? — go tool objdump
- クロスコンパイル — GOOS, GOARCH
- cgoでGoのコードからCの関数を利用する — cgo
- Goのコードでgoのバージョンを調べる方法
- HTTP
- ファイル入出力
- リファレンス篇
- ソースコードの表現方法
- キーワードと宣言済み識別子 — キーワード・宣言済み識別子(組込み型・組込み関数)
- 字句的要素
- 定数と変数 — 定数(iota)・変数
- 型
- 型と値の特性
- ブロック・宣言とスコープ — ブロック・宣言とスコープ・
- 式 — 演算子
- 文
- パッケージ
- プログラムの初期化と実行
- エラー
- EBNF
- 標準ライブラリー篇
Go 1.19 の変更点[編集]
2022年8月にリリースされた Go 1.19 はジェネリックスのポリシングとともに、ドキュメントコメントや新しいメモリモデルなどの新機能が追加されたバージョンです[2][3]。
- ジェネリックス — 微妙な問題やコーナー ケースへの対応と、パフォーマンスの向上 (一部のジェネリック プログラムで最大 20% 向上) 。
- Docコメント( Doc comments ) — 新たにリンク、リスト、およびより明確な見出し構文をサポート。「Go Doc Comments」も参照
- メモリモデル — happens-before 関係の正式な定義が、C、C++、Java、JavaScript、Rust、および Swift で使用されるメモリ モデルと一致するように改訂されました。
- os/exec パッケージは PATH ルックアップ — (セキュリティー上の理由で)相対パスを参照しなくなりました。
- ガベージコレクター — ソフトメモリ制限のサポートが追加されました。
- Build Constraints — unix が追加されました。
Go 1.18 の変更点[編集]
2022年3月にリリースされた Go 1.18 はジェネリックスに代表される新機能が追加されたバージョンです[4]。 ここでは、言語に関する変更を中心に変更点を解説します。
Go 1.18 には、型パラメータプロポーザル[5]で説明されたジェネリック機能の実装が含まれています。
以下は、最も目に付く変更点のリストです。
- 関数と型宣言の構文に型パラメータが使えるようになりました。⇒ /関数#ジェネリック関数
- パラメータ化された関数や型は、その後に角括弧で型引数のリストを記述することでインスタンス化することができます。
- 新しいトークン ~ が演算子および区切子(punctuation)に追加されました。⇒ /字句的要素#演算子と区切子
- インターフェイス型の構文では、任意の型(インターフェイスの型名だけでなく)、unionや~T型要素を埋め込むことができるようになりました。このようなインターフェースは、型制約としてのみ使用することができます。インターフェイスはメソッドと同様に型の集合を定義するようになりました。⇒ /型#インターフェース型
- 新しい事前宣言された識別子
any
は空のインターフェースの別名です。これはinterface{}
の代わりに使用することができます。 - 新しい宣言済み識別子
comparable
は==
や!=
を使って比較できる全ての型の集合を表すインターフェースです.
ジェネリックを使った実験的なパッケージが3つあり、便利かもしれません。これらのパッケージは x/exp リポジトリにあります。これらのパッケージの API は Go 1 の保証の対象外であり、ジェネリックの経験を積むにつれて変更される可能性があります。
- golang.org/x/exp/constraints
constraints.Ordered
のようなジェネリックコードに便利な制約です。- golang.org/x/exp/slices
- 任意の要素タイプのスライス上で操作するジェネリック関数のコレクションです。
- golang.org/x/exp/maps
- 任意のキーや要素タイプのマップ上で操作するジェネリック関数のコレクションです。
脚註[編集]
- ^ “Introduction¶”. The Go Programming Language Specification. The Go website. (Jul 26, 2021) .
- ^ Go 1.19 Release Notes - The Go Programming Language. (2022/08/02) 2022年8月4日閲覧。.
- ^ Go 1.19 is released! - The Go Programming Language. (2022/08/02) 2022年8月4日閲覧。.
- ^ Go 1.18 Release Notes - The Go Programming Language. (2022/03/10) 2022年8月4日閲覧。.
- ^ Type Parameters Proposal 2021年9月30日閲覧。.
参考文献[編集]
- The Go Programming Language Specification. The Go website. (Jul 26, 2021) .
- Go プログラミング言語仕様. (2021/02/10) .