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

2018年8月30日Go言語のお勉強A Tour of Go,Goのお勉強,Go言語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言語のお勉強 記事一覧

  1. うっしー「Go」に手を出す…
  2. 「A Tour of Go」をやる! シリーズ
    1. その1 「Hello, 世界」
    2. その2 「Packages」だってさ~
    3. その3 「Imports」いんぽーっ!
    4. その4 「Exported names」見えますか?
    5. その5 「Functions」 これは機能です。
    6. その6 「Functions continued」(?) 型しょ~略っ!
    7. その7 「Multiple results」 一粒で二度美味しい?
    8. その8 「Named return values」 お前は戻り値だ…
    9. その9 「Variables」入れ物!
    10. その10 「Variables with initializers」砂でも詰めるか…
    11. その11 「Short variable declarations」 略パート2!
    12. その12 「Basic types」 型抜きってあったな…
    13. その13 「Zero values」 生まれ持った中身は?
    14. その14 「Type conversions」 1は1.0になれる!

「A Tour of Go」記事は現在書き直し中…。_(┐「ε:)_
サボったりサボったり…で尻切れシリーズになっていましたが、最近続きを書く気になりました。が、これまでの記事を改めて見返すと記事のデータ・フォーマットが古く、この際だからと最初の記事から書き直しております。