Go言語入門:言語仕様 -Vol.61-

スポンサーリンク
Go言語入門:言語仕様 -Vol.61- 用語解説
Go言語入門:言語仕様 -Vol.61-
この記事は約4分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

本日は、Go言語の言語仕様について解説しています。

スポンサーリンク

背景

Go言語を学び始めて、公式の「The Go Programming Language Specification(言語仕様書)」を開いてみたものの、「英語で書かれていて読むのが大変…」「専門用語ばかりで何を言っているのかわからない…」と感じたことはありませんか? 実は、多くのGo初心者が同じ壁にぶつかっています。

言語仕様書は、Go言語の「正式な取扱説明書」のような存在です。プログラミング言語がどのように動くのか、どんなルールで書くべきなのかが詳しく書かれていますが、その分、初めて読む人には難しく感じられるのも事実です。

そこでこの記事では、言語仕様書の導入部分を丁寧な日本語訳とともに、初心者の方でも理解しやすい補足説明を加えてお届けします。「強く型付けされている」「ガベージコレクション」「並行プログラミング」といった専門用語も、具体例を交えながらわかりやすく解説していきます。

言語仕様書は難しそうに見えますが、一つひとつの概念を丁寧に読み解いていけば、必ず理解できます。一緒に、Go言語の基礎をしっかり学んでいきましょう!

修飾識別子(Qualified identifiers)

修飾識別子は、パッケージ名の接頭辞で修飾された識別子である。パッケージ名と識別子のどちらもブランクであってはならない。

QualifiedIdent = PackageName "." identifier .

修飾識別子は、異なるパッケージ内の識別子にアクセスする。そのパッケージはインポートされていなければならない。識別子はエクスポートされており、かつそのパッケージのパッケージブロック内で宣言されていなければならない。

math.Sin // パッケージ math 内の Sin 関数を表す

解説

修飾識別子ってなに?

「修飾識別子」とは、パッケージ名.識別子名 という形で他のパッケージの中身を参照する書き方のことです。Go を書いていれば毎日のように使っていますね。

fmt.Println    // fmt パッケージの Println 関数
math.Pi        // math パッケージの Pi 定数
os.Open        // os パッケージの Open 関数

使うための2つの条件

修飾識別子でアクセスするには、2つの条件を満たす必要があります。

1. パッケージがインポートされていること

import "math"

func main() {
    x := math.Sin(1.0)  // OK! math をインポート済み
}

インポートしていないパッケージの識別子を使おうとすると、コンパイルエラーになります。

2. 識別子がエクスポートされていること

Go では、名前の先頭が大文字の識別子だけが外部パッケージからアクセスできます。これがエクスポートのルールです。

math.Sin    // OK! Sin は大文字で始まる → エクスポートされている
math.sin    // コンパイルエラー! 仮にこれがあっても小文字なのでアクセスできない

他の言語では publicprivate といったキーワードでアクセス制御をしますが、Go では大文字・小文字の1文字目だけで決まります。とてもシンプルですね。

なぜこの仕組みがあるの?

パッケージの中には、外から使ってほしい機能と、内部だけで使う補助的な機能があります。修飾識別子とエクスポートの仕組みにより、パッケージの作者は「外に見せる部分」と「中に隠す部分」を明確に分けられます。

package mylib

func DoSomething() { ... }   // 大文字 → 外から使える
func helperFunc() { ... }    // 小文字 → 外からは見えない

こうすることで、パッケージの利用者は公開された部分だけを気にすればよく、内部の実装が変わっても影響を受けにくくなります。

おわりに 

本日は、Go言語の言語仕様について解説しました。

よっしー
よっしー

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました