__TOC__
型と値の特性(''Properties of types and values'')
各型Tには、基礎となる型(underlying type)Underlying typeを基礎となる型と訳しました。があります。
Tがあらかじめ宣言された論理型、数値型、文字列型、あるいは型リテラルのいずれかである場合、対応する基礎となる型はT自身です。
そうでない場合、Tの基礎となる型は、Tが宣言の中で参照する型の基礎となる型です。
型パラメーターの場合は、その型制約の基礎となる型で、それは常にインターフェースです。
非インタフェース型Tはそれぞれコア型(core type)Core typeをコア型と訳しました。を持ち、それはTの基礎となる型と同じです。
インターフェースTがコア型を持つのは、以下の条件のいずれかが満たされる場合である。
Tの型集合に含まれるすべての型の基礎となる単一の型Uが存在する。
Tの型集合は，同一の要素型Eを持つチャネル型のみを含み、すべての方向性チャネルは同じ方向を持つ。
他のインターフェースはコア型を持たない。
インターフェースのコアタイプは、満たされる条件によって、次のいずれかになります。
定義上、コア型は定義された型、型パラメータ、インタフェース型ではありません。
型同一性(''Type identity'')
2つの型の間にある関係は、同じか異なるかのどちらかです。
定義された型は、常に他の型とは異なります。それ以外の場合、2つの型は、その基礎となる型リテラルが構造的に等価である場合、つまり、同じリテラル構造を持ち、対応するコンポーネントが同じ型を持つ場合、同一の型となります。詳しくは：
2つの配列型は、要素の型が同じで、配列の長さが同じであれば同一です。
2つのスライス型は、要素の型が同じであれば同一です。
2 つの struct 型は、同じフィールドのシーケンスを持ち、対応するフィールドが同じ名前、同じ型、同じタグを持つ場合、同一の型となります。異なるパッケージからエクスポートされていないフィールド名は常に異なります。
2つのポインター型は、基本型が同じであれば同一です。
2つの関数型は、それらが同じ数のパラメータと結果値を持ち、対応するパラメータと結果の型が同じで、両方の関数が可変長であるか、どちらもそうでない場合、同一です。パラメータと結果の名前は一致する必要はありません。
2つのインターフェース型は、同じ名前の同じメソッドのセットを持ち、同一の関数型を持つ場合、同一のものとなります。異なるパッケージからエクスポートされていないメソッド名は常に異なります。メソッドの順番は関係ありません。
2つのマップ型は、同一のキー型とエレメント型を持つ場合、同一です。
2つのチャンネル型は、要素型が同一で、方向が同じであれば同一です。
次に示す宣言があったとき
コード:
type (
	A0 = []string
	A1 = A0
	A2 = struct{ a, b int }
	A3 = int
	A4 = func(A3, float64) *A0
	A5 = func(x int, _ float64) *[]string
)
type (
	B0 A0
	B1 []string
	B2 struct{ a, b int }
	B3 struct{ a, c int }
	B4 func(int, float64) *B0
	B5 func(x int, y float64) *A1
)
type	C0 = B0
これらの型は同一です。
コード:
A0, A1, and []string
A2 and struct{ a, b int }
A3 and int
A4, func(int, float64) *[]string, and A5
B0 and C0
[]int and []int
struct{ a, b *T5 } and struct{ a, b *T5 }
func(x int, y float64) *[]string, func(int, float64) (result *[]string), and A5
func(int, float64) *B0 と func(x int, y float64) *[]string は、B0 が []string と異なるため、異なるものとなります。
代入可能性(''Assignability'')
値x がT 型の変数に代入可能である（「x はTに代入可能である」）のは、次のいずれかの条件が当てはまる場合である。
表現可能性(''Representability'')
定数 xは、以下の条件のいずれかに当てはまる場合、T 型の値で''表現可能''(representable)である。
丸めはIEEE 754 round-to-even規則を使用しますが、IEEE負のゼロはさらに符号なしのゼロに簡略化されます。なお、定数値はIEEE負のゼロ、NaN、無限大にはなりません。