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

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

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

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

スポンサーリンク

背景

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

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

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

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

ソースファイルの構成

各ソースファイルは、そのファイルが属するパッケージを定める「パッケージ句(package clause)」から始まり、続いて利用したいパッケージの内容を宣言する「インポート宣言」(空でもよい)が並び、その後に関数・型・変数・定数の宣言(空でもよい)が続きます。

SourceFile = PackageClause ";" { ImportDecl ";" } { TopLevelDecl ";" } .

解説

結論:Goのソースファイルは「①パッケージ宣言 → ②インポート → ③本体の宣言」という決まった順番で書く。②と③は無くてもよい。

3つのブロックの順番

どんなGoのソースファイルも、必ず次の順番になります。この順番は固定で、入れ替えるとコンパイルエラーになります。

package shop // ① パッケージ句:必須・一番上

import "fmt" // ② インポート宣言:使うものがあれば書く

func Hello() { // ③ 関数・型・変数・定数の宣言
	fmt.Println("hello")
}

「①必須 → ②任意 → ③任意」と覚えてください。手紙に例えると、①が「宛先」、②が「同封物のリスト」、③が「本文」のようなもので、宛先を書かずに本文から始めることはできません。

②と③は「空でもよい」

原文の “possibly empty”(空でもよい)が示すとおり、インポートも本体の宣言も無くて構いません。次のファイルは合法です。

package shop

これだけでも、shop パッケージのソースファイルとして成立します。何もインポートせず、何も宣言していませんが、エラーにはなりません。

文法表記(BNF)の読み方

最後の1行は、ファイルの構造を形式的に表した文法定義です。記号の意味は次のとおりです。

記号意味
=「左辺は右辺で定義される」
";"区切り(セミコロン。実際には改行が自動で補われることが多い)
{ ... }中括弧の中身は「0回以上の繰り返し」(つまり無くてもよい)
.定義の終わり

これを踏まえて SourceFile = PackageClause ";" { ImportDecl ";" } { TopLevelDecl ";" } . を読むと、次のようになります。

ソースファイルは、PackageClause(パッケージ句)が1つ、その後に ImportDecl(インポート宣言)が0個以上、さらに TopLevelDecl(トップレベル宣言=関数・型・変数・定数)が0個以上、という構成だ、という意味です。

{ } で囲まれた ImportDeclTopLevelDecl が「0個以上」、つまり先ほどの「空でもよい」に対応しています。一方 PackageClause{ } で囲まれていないので、必ず1つ必要だとわかります。


補足:セミコロン ";" について、Goでは行末のセミコロンを自分で書くことはほとんどありません。コンパイラが改行を見て自動的に補うためです。文法定義上は必要なので明記されていますが、実際のコードでは改行がその役割を果たす、と理解しておけば十分です。

おわりに 

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

よっしー
よっしー

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

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

コメント

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