
こんにちは。よっしーです(^^)
本日は、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個以上、という構成だ、という意味です。
{ } で囲まれた ImportDecl と TopLevelDecl が「0個以上」、つまり先ほどの「空でもよい」に対応しています。一方 PackageClause は { } で囲まれていないので、必ず1つ必要だとわかります。
補足:セミコロン ";" について、Goでは行末のセミコロンを自分で書くことはほとんどありません。コンパイラが改行を見て自動的に補うためです。文法定義上は必要なので明記されていますが、実際のコードでは改行がその役割を果たす、と理解しておけば十分です。
おわりに
本日は、Go言語の言語仕様について解説しました。

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

コメント