10. スコープ
スコープとは、変数名や関数名などの名前を参照できる範囲のことです。
この章ではGo言語におけるスコープをご紹介します。
- 10.1 ブロック
- 10.2 スコープ
- 10.3 エクスポートされた識別子
10.1 ブロック
スコープは以下の各ブロックで定義されています。
ブロック とは { と } に囲まれた一連の定義と宣言で、以下の種類があります。
ブロック | ブロックの範囲 |
---|---|
universe | 全てのGoソース |
package | パッケージの全てのGoソース |
file | ファイル内の全てのGoソース |
local | function body、if、for、switch、case、select |
10.2 スコープ
universeブロック
事前宣言された型、定数、ゼロ値、関数
- 事前宣言された型
- bool byte complex64 complex128 error float32 float64
- int int8 int16 int32 int64 rune string
- uint uint8 uint16 uint32 uint64 uintptr
- 定数
- true false iota
- ゼロ値
- nil
- 関数
- append cap close complex copy delete imag len
- make new panic print println real recover
packageブロック
トップレベル関数外で宣言された定数、型、変数、関数(メソッド除く)
fileブロック
インポートされたパッケージのパッケージ名
localブロック
- メソッドのレシーバ、関数の引数、戻り値の変数はfunction bodyがスコープです。
- 関数内で宣言された定数または変数は宣言(変数は省略宣言)から宣言を内包する最も小さなブロックがスコープです。
- 関数内で宣言された型は宣言から宣言を内包する最も小さなブロックがスコープです。
10.3 エクスポートされた識別子
以下の条件をどちらも満たす「識別子をエクスポートされた識別子」といい、他のパッケージからのアクセスを許可します。
- 識別子名の1文字目が大文字であること
- packageブロック内で宣言されているか、フィールド名またはメソッド名であること
条件を満たさない他の識別子はエクスポートされていないため、他のパッケージからアクセスできません。
参考
Declarations and scope
Goのスコープについて考えてみよう #golang
go/types: The Go Type Checker