A Tour of Go をやる! – その4 「Exported names」見えますか? 【Go言語/A Tour of Go】

2018年8月30日GoA Tour of Go,Goのお勉強,Go言語Go,A Tour of Go,Goのお勉強,Go言語

記事ヘッダー_Exported_names

「A Tour of Go をやる!」シリーズの第4回目。

何時も通り「A Tour of Go」を進めます。
今回の内容は「Exported names」です。

お題は「Exported names(エクスポートネーム)」

こちらが該当ページ。

んでは詳しく見ていきます。

「Exported names」とは?

そもそものお話ですが、「Exported names」とは何だ?からですね。
お題ページには次の説明が書かれています。

Goでは、最初の文字が大文字で始まる名前は、外部のパッケージから参照できるエクスポート(公開)された名前( exported name )です。 例えば、 Pi は math パッケージでエクスポートされています。

https://go-tour-jp.appspot.com/basics/3

つまりこうですね。

パッケージ間でのファンクションのスコープ
パッケージ間でのファンクションのスコープ

小文字で宣言されたファンクションは、他所のパッケージから見えない。
先頭大文字で定義されたファンクションは、他所のパッケージから見える。

これを踏まえてサンプルプログラムを見てみましょうか。

サンプルプログラムを見る

関連箇所にコメントを入れたものです。

さて、実行してみると気づくと思いますが、このプログラムはエラーになります。

./prog.go:11:15: cannot refer to unexported name math.pi
(エクスポートされていない名前math.piを参照できません)

math.pi がエクスポートされていないよっ、というエラーです。
まぁ…、エクスポートされてないというか、外部パッケージのファンクションを参照するルールを守ってないんですね。

他所のパッケージ(main)からファンクション(math.Pi)を見るためには、先頭大文字がルール。
というわけでプログラムを修正してみます。

今度は円周率が表示されました。
今度は正しく math.Pi (円周率を求めるファンクション) が動いたようですね。

さいごに

今回はパッケージ間におけるファンクションの参照可否のお話でした。

これはよくスコープ(範囲)と言われるものですね。
ファンクションのスコープ、変数のスコープ、など、見せる範囲といった意味でよく使われます。
別の言語では、パブリック(public)やプライベート(private)などと言ったりもします。

なんでこんな概念があるのかというと…
例えば、自分のパッケージ内だけで必要な処理や変数などを隠したりする為ですね。

そんなところで、また次回。٩( 'ω’ )و

「Go言語のお勉強」インデックス

このシリーズについて

「A Tour of Go」を題材にした記事は現在書き直し中…。_(:3」∠)_
ほとんどサボりが原因で尻切れとなっていたシリーズですが、最近になってようやく続きを書きたくなり再開をしようと思ったんです。が、古い記事を見返すとデータ・フォーマットが古かったり内容が分かり難かったりに気づきまして、、、この際だからと最初の記事から書き直しをすることになりました…