assignability(代入可能性)
仕様書リンク https://golang.org/ref/spec#Assignability
値xが型Tに代入可能であるのは、次のいずれかの条件が成り立つときです。
xの型がTと同一(identical)であるとき
xの型とTが同一の基底型(underlying type)をもち、かつ、少なくともいずれかがdefined typeではないとき
Tがinterface型でありxがそれを実装するとき
xが両方向チャネルの値であり、Tはチャネル型であって、xの型Vと型Tとが同一の要素型を持ち、かつ、VとTのうち少なくともいずれかがdefined typeではないとき
xがpredeclared identifiers(事前宣言された識別子)としてのnilであり、かつ、Tがポインタ、関数、スライス、マップ、チャネルまたはinterface型であるとき
xがuntyped constant(型付けなし定数)であって、かつ型Tの値によって表現可能(representable)であるとき
解説
type identity(型の同一性)より広い概念である。つまり、型の同一性が成り立つときには代入可能性も成り立つが、代入可能性が成り立つからと言って必ずしも型の同一性は成り立たない。
関連
x = yのような代入文のほか、次の場面に関係する。
関数の引数としてある値を使えるかどうか
map[S]Tのkeyとしてある値を使えるかどうか
定数でない値x が型Tにconversion(型変換)可能であるための1つの十分条件になる
例題
https://docs.google.com/presentation/d/1CO8WxJJZdBeUy_SimUoHVf4sofWuhA1jTdIx5aIVnlc/edit?usp=sharing