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

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

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

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

スポンサーリンク

背景

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

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

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

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

パッケージ

Goのプログラムは、パッケージ同士をリンクすることで構築されます。そしてパッケージは、1つ以上のソースファイルから構築されます。それらのソースファイルは、そのパッケージに属する定数・型・変数・関数を宣言し、それらは同じパッケージ内のすべてのファイルからアクセスできます。また、これらの要素はエクスポートして、別のパッケージから使うこともできます。

解説

結論:Goのプログラムは「パッケージ」という部品の集まりであり、パッケージは複数のファイルに分かれていても1つのまとまりとして扱われる。

パッケージとは何か

「パッケージ」は、関連するコードをひとまとめにした箱だと考えてください。料理に例えると、「調味料」「野菜」「肉」のように、似たもの同士をまとめて引き出しに整理するイメージです。Goでは、似た役割を持つ定数・型・変数・関数を1つのパッケージにまとめます。

ファイルの先頭で、そのファイルがどのパッケージに属するかを宣言します。

package main

import "fmt"

func main() {
	fmt.Println("Hello") // 標準出力に表示する
}

この package main が「このファイルは main というパッケージの一員ですよ」という宣言です。

1つのパッケージが複数ファイルに分かれてもよい

ここが初心者のつまづきやすいポイントです。原文の「1つ以上のソースファイルから構築される」という部分が示すとおり、同じパッケージは複数のファイルに分割できます

例えば、shop というパッケージを次のように2ファイルに分けられます。

// product.go
package shop

type Product struct { // 商品をあらわす型
	Name  string
	Price int
}
// order.go
package shop

func TotalPrice(p Product) int { // 合計金額を計算する
	return p.Price
}

order.go の中で product.goProduct 型を、import なしでそのまま使えます。同じ shop パッケージに属しているからです。原文の「同じパッケージ内のすべてのファイルからアクセスできる」とはこのことです。学校のクラスに例えると、同じクラスの生徒同士は自己紹介なしでも名前で呼び合える、というイメージです。

エクスポート(別のパッケージから使う)

最後の一文が「エクスポート」です。パッケージ内の要素を他のパッケージからも使えるように公開する仕組みを指します。

Goでは、名前の先頭を大文字にするとエクスポート(公開)され、小文字だとそのパッケージ内だけの非公開になります。

package shop

func TotalPrice(p Product) int { // 大文字始まり → 外部から使える
	return calcTax(p.Price)
}

func calcTax(price int) int { // 小文字始まり → このパッケージ内だけ
	return price / 10
}

別のパッケージからは shop.TotalPrice(...) は呼べますが、shop.calcTax(...) は呼べません。マンションに例えると、エントランス(大文字=公開)は誰でも入れるが、各部屋(小文字=非公開)は住人しか入れない、という区別です。


補足:この節は概要にあたる部分で、import の書き方やパッケージ名の具体的なルールは後続の節で詳しく定義されます。

おわりに 

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

よっしー
よっしー

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

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

コメント

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