Go/キーワードと宣言済み識別子

Goでは、他の言語でキーワードや予約語と呼ばれる構文要素が、キーワード(Keywords)と宣言済み識別子(Predeclared identifiers)に別れます。
以下のキーワードは予約済みで、識別子として使用することはできません。
int や float32 などのプリミティブな型名が含まれていませんが、それらは宣言済み識別子です。 このため、var int = 123.456は、float64型の変数 int 値は 123.456 と「正しく」解釈されます。 PL/Iのようですね。
ユニバースブロック(universe block)では、以下の識別子が暗黙的に宣言されています。
Goでは、いくつもの型名をあらかじめ宣言しています。 規格では特にこの様な型のグループに呼び名を与えていませんが、本書でが便宜上名前が必要なので、宣言済み識別子を持つ関数を組込み関数(built-in function)と呼ぶのにならって、宣言済み識別子を持つ型を組込み型と呼びます。
組込み型 bool は論理型(boolean type) です。 論理型は事前に宣言された定数 true と false で示される論理真理値の集合を表します。組込み型です。
整数型、浮動小数点型、複素数型は、それぞれ整数値、浮動小数点値、複素数値の集合を表します。これらは総称して数値型(numeric type)と呼ばれます。事前に宣言されているアーキテクチャに依存しない数値型は次のとおりです。
また、実装固有のサイズを持つ宣言済みの数値型のセットもあります。
組込み型 string は、文字列型(string type) です。 文字列型は、文字列値(string values)の集合を表します。文字列の値は、(空の場合もある)バイトの列です。バイトの数は文字列の長さと呼ばれ、負の値にはなりません。文字列は不変(immutable)です。一度作成した文字列の内容を変更することはできません。
文字列 s の長さは,組み込み関数 len を使って知ることができます。文字列が定数の場合,長さはコンパイル時の定数となります。文字列のバイトは,0からlen(s)-1までの整数の添字でアクセスできます。 要素のアドレスを取ることは違法です。s[i]が文字列のi番目のバイトである場合、&s[i]は無効です。
組込み型 error は次のように定義されています。
これは、エラー状態を表現するための従来のインターフェースで、nil値はエラーがないことを表します。例えば、ファイルからデータを読み込む関数が定義されているとします。
組込み関数はあらかじめ宣言されています。これらは他の関数と同様に呼び出されますが、中には最初の引数として式ではなく型を受け取るものもあります。 組込み関数は、Goの標準的な型を持たないので、呼び出し式の中でのみ登場し、関数の値としては使えません。
チャンネルcに対して、組込み関数close(c)は、そのチャンネルでそれ以上の値が送信されないことを記録します。 cが受信専用のチャンネルの場合はエラーになります。 閉じたチャネルに送信したり、閉じたりすると、ランタイム・パニック(run-time panic)を起こします。 nilチャンネルのクローズもランタイム・パニックを引き起こします。 closeを呼び出した後、それまでに送信された値がすべて受信された後、受信操作はブロックすることなくチャネルのタイプに応じたゼロの値を返します。 多値受信操作(multi-valued receive operation)では、チャネルが閉じているかどうかの表示とともに、受信値が返されます。
組込み関数 len と cap は、様々な型の引数を取り、int型の結果を返します。実装では、結果が常にint型に収まることが保証されています。
スライスの容量は、基礎となる配列に割り当てられたスペースがある要素の数です。いつでも以下の関係が成り立ちます。
nilのスライス、マップ、チャンネルの長さは0です。nilのスライス、チャンネルの容量は0です。
式 len(s) は、s が文字列定数の場合、定数です。式 len(s) と cap(s) は、s の型が配列または配列へのポインタで、式 s にチャンネルの受信や (定数でない) 関数呼び出しが含まれていない場合、定数となり、この場合 s は評価されません。この場合,s は評価されません。そうでなければ,len と cap の呼び出しは定数ではなく,s は評価されます。
組込み関数 new は,型Tを受け取り,実行時にその型の変数のためのストレージを確保し,その変数を指す*T型の値を返します。この変数は,初期値の項で説明したように初期化されます。
例えば
S型の変数の格納場所を確保して初期化し(a=0, b=0.0),その場所のアドレスを含む*S型の値を返すようになっています。
組込み関数 make は,スライス型,マップ型,チャネル型でなければならないT型を受け取り,任意で型固有の式のリストを続けます。 この関数は,T型の値を返します(*Tではありません)。 メモリは,初期値の項で述べたように初期化されます。。
サイズ引数nとmは、それぞれ整数型または型付けされていない定数でなければなりません。定数のサイズ引数は非負で、int型の値で表されなければなりません。型付けされていない定数の場合、int型が与えられます。nとmの両方が提供され、かつ定数である場合、nはmより大きくてはなりません。実行時にnが負またはmより大きい場合、実行時パニックが発生します。
組込み関数 append と copy は、一般的なスライス操作を支援します。どちらの関数も、引数で参照されるメモリが重なっているかどうかに関係なく、結果が得られます。
可変長引数(variadic)な関数appendは、0個以上の値xをスライス型でなければならないS型のsに追加し、結果としてS型のスライスを返します。値xは、TがSの要素型である...T型のパラメータに渡され、それぞれのパラメータ通過規則が適用されます。特殊なケースとして、appendは、[]byte型に割り当てられる第1引数と、... に続く文字列型の第2引数も受け入れます。この形式では、文字列のバイトを追加します。
sの容量が追加の値を収めるのに十分な大きさでない場合、appendは既存のスライス要素と追加の値の両方を収めることができる、十分に大きい新しい基本配列を割り当てます。そうでなければ、appendは基礎となる配列を再利用します。
組込み関数 delete は,キーkを持つ要素をマップmから削除します。kの型はmのキーの型に割り当て可能でなければなりません。
マップmがnilであったり、要素m[k]が存在しない場合、deleteはno-opとなります。
3つの関数が複素数を組み立てたり分解したりします。組込み関数 complex は,浮動小数点の実部と虚部から複素数値を構成し,real と imag は複素数値の実部と虚部を抽出します。
引数の型と戻り値の型が対応しています。complexの場合、2つの引数は同じ浮動小数点型でなければならず、戻り値の型は、対応する浮動小数点構成要素を持つ複素数型です:float32の引数にはcomplex64、float64の引数にはcomplex128です。引数の1つが型付けされていない定数として評価される場合、それは最初に他の引数の型に暗黙的に変換されます。両方の引数が型付けされていない定数として評価される場合、それらは非複素数でなければならず、あるいはそれらの虚数部はゼロでなければならず、関数の戻り値は型付けされていない複素数定数となります。
realとimagの場合、引数は複素数型でなければならず、戻り値の型は対応する浮動小数点型です:complex64の引数にはfloat32、complex128の引数にはfloat64です。引数が型付けされていない定数として評価される場合、それは数値でなければならず、関数の戻り値は型付けされていない浮動小数点定数となります。
real関数とimag関数は対でcomplexの逆数を構成するので、複素数型Zの値zに対しては、z == Z(complex(real(z), imag(z)))となります。
panic と recover という2つの組込み関数は、ランタイムパニックやプログラム定義のエラー状態の報告と処理を支援します。
現在の実装では、ブートストラップの際に便利ないくつかの組み込み関数が用意されています。これらの関数は完成度を高めるために文書化されていますが、言語として残ることは保証されていません。これらの関数は結果を返しません。