削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎外部リンク: {{Wikipedia|Go (プログラミング言語)|Go}} {{Wikiversity|Topic:Go|Go}}
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
→‎Go 1.18 での変更: 2022年3月にリリースされた Go 1.18 はジェネリックスに代表される新機能が追加されたバージョンです.
タグ: 2017年版ソースエディター
57 行
;[[/標準ライブラリー|標準ライブラリー篇]]
 
== 脚註Go 1.18 での変更 ==
2022年3月にリリースされた Go 1.18 はジェネリックスに代表される新機能が追加されたバージョンです<ref>{{cite book
| url = https://go.dev/doc/go1.18
| title = Go 1.18 Release Notes - The Go Programming Language
| date = 2022/03/10
}}</ref>。
ここでは、言語に関する変更を中心に変更点を解説します。
 
Go 1.18 には、型パラメータプロポーザル<ref>{{cite book
| url=https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md
| title=Type Parameters Proposal
| accessdate=2021-09-30
}}</ref>で説明されたジェネリック機能の実装が含まれています。
 
以下は、最も目に付く変更点のリストです。
 
* 関数と型宣言の構文に型パラメータが使えるようになりました。⇒ [[/関数#ジェネリック関数|ジェネリック関数]]
* パラメータ化された関数や型は、その後に角括弧で型引数のリストを記述することでインスタンス化することができます。
* 新しいトークン ~ が演算子および句読点(punctuation)に追加されました。
* インターフェイス型の構文では、任意の型(インターフェイスの型名だけでなく)、unionや~T型要素を埋め込むことができるようになりました。このようなインターフェースは、型制約としてのみ使用することができます。インターフェイスはメソッドと同様に型の集合を定義するようになりました。
* 新しい事前宣言された識別子<code>any</code>は空のインターフェースの別名です。これは <code>interface{} </code>の代わりに使用することができます。
* 新しい宣言済み識別子 <code>comparable</code> は <code>==</code> や <code>!=</code> を使って比較できる全ての型の集合を表すインターフェースです.
 
ジェネリックを使った実験的なパッケージが3つあり、便利かもしれません。これらのパッケージは x/exp リポジトリにあります。これらのパッケージの API は Go 1 の保証の対象外であり、ジェネリックの経験を積むにつれて変更される可能性があります。
 
;golang.org/x/exp/constraints
:<code>constraints.Ordered</code>のようなジェネリックコードに便利な制約です。
;golang.org/x/exp/slices
:任意の要素タイプのスライス上で操作するジェネリック関数のコレクションです。
;golang.org/x/exp/maps
:任意のキーや要素タイプのマップ上で操作するジェネリック関数のコレクションです。
 
<!--
現在のジェネリックの実装には、以下のような既知の制限があります。
 
Go コンパイラーはジェネリック関数やメソッドの内部で型宣言を扱うことができません。将来のリリースでこの機能のサポートを提供したいと考えています。
Go コンパイラはあらかじめ宣言された関数 real、imag、complex でのパラメータ型の引数を受け付けません。将来のリリースでこの制限を取り除く予定です。
Goコンパイラは、mがPの制約インタフェースによって明示的に宣言されている 場合にのみ、パラメータ型Pの値xに対するメソッドmの呼び出しをサポートします。同様に、メソッド値 x.m とメソッド式 P.m も、P のすべての型が m を実装しているという事実によって m が P のメソッドセットにある可能性があるにもかかわらず、m が P によって明示的に宣言された場合にのみサポートされます。
Go コンパイラーは、型パラメーターの型セット内のすべての型がフィールド f を持っていても、x が型パラメーター型の構造体フィールド x.f へのアクセスをサポートしません。
型パラメータや型パラメータへのポインタを構造体型の無名フィールドとして埋め込むことは許されません。同様に,インタフェース型に型パラメータを埋め込むことも許されません.これらが今後許可されるかどうかは、現時点では不明です。
2つ以上の項を持つユニオン要素は,空でないメソッド集合を持つインタフェース型を含んではならない。これが許可されるようになるかどうかは、今のところ不明です。
ジェネリックもまた、Go のエコシステムにとって大きな変化を意味します。いくつかのコア ツールをジェネリックスのサポートで更新しましたが、やるべきことはまだたくさんあります。残りのツール、ドキュメント、ライブラリがこの言語の変更に追いつくには時間がかかるでしょう。
-->
==脚註 ==
<references />