Go読書会 #11 がランサーズ株式会社で行われたので進捗と技術的なメモ書きを書いておきます。読書会の内容はプログラミング言語Goを冒頭から皆で読み進めていくというものです。
進捗した内容
- 7章 インタフェース
- 7.3 インターフェースを満足する
- 7.4 flag.Valueによるフラグの解析
- 7.5 インターフェース値
話題に上がった話
7.3 インターフェースを満足する
ここでは、関数がインターフェースが要求しているすべてのメソッドの型を保持していること
を指すインターフェースを満足するということが出てきました。そのままの言葉通りでinterfaceで宣言されているメソッドと同じ型のメソッドをそのデータ型が実装しているかどうかという意味です。型がインターフェースを満足していれば、その型はインターフェースに代入可能となります。
type Hoge interface {
String() string
}
type Page struct {}
func (*p Page) say() string {
return "Hello"
}
あと、ここで話題になったのは空インターフェース
です。基本どんな型でも代入可能なのですが、これはインターフェースを満足するというルールを満たしているためです。型に対して何も要求していないのですべての値を代入することが出来ます。
7.5 インターフェース値
ここでは、インターフェースは動的な型(dynamic type)
と動的な値(dynamic value)
という2つの構成要素を持っている。動的に決まるので通常の型では起こらないようなpanicなどが起きうるので注意することが必要。あとは、インターフェースを通して呼び出すときは、コンパイル時に決まらないので型記述子から該当のメソッドを取得して、間接的に呼び出す動的なディスパッチ
などをコンパイラが行っていうることが書かれていました。
今週は短縮だったので、短いです。
ここまで呼んだところで、時間になりました。次回は 7.5.1 警告:nilポインタを含むインターフェースはnilではない
からです。