3.1 構造体の基本的な使い方

Goの構造体には次のような特徴があります。

  • フィールドをまとめて持てる

  • 他の構造体を埋め込むことができる。一見、親クラスの継承のように見えるが、アップキャスト、ダウンキャストはできない

  • 関数の中や式の中でも動的に構造体を定義できる

また、前章で説明したように、型を定義すれば固有のメソッドも定義できます。メソッドを定義すると次章で紹介するインタフェースも活用できるようになります1

ここでは、このうち最初の項目について説明します。

もっとも基本的な書き方は次の通りです。簡単ですね。構造体の中には フィールド を定義します。フィールドには名前と型が並びます。通常の変数と同様に、小文字の名前を使うとプライベートになり、大文字にすると、外部のパッケージからも読み書きできるパブリックなフィールドになります。Goの場合、構造体の宣言はファイルの直下に書くことが多いのですが、関数の中でしか使わない構造体を関数の中で定義することも可能です。

type Book struct {
	Title      string
	Author     string
	Publisher  string
	ReleasedAt time.Time
	ISBN       string
}

この構造体の定義から「インスタンス(instance)」を作成します。構造体はメモリ上に存在しないデータのレイアウト定義ですが、インスタンスは構造体のフィールドのデータを一括で保存するメモリ領域です。オブジェクトとも呼ばれます。

他の言語のクラスでは、フィールドはプライベートにして、読み書きはメソッド経由で行い、要素への直接アクセスに見える読み書きのメソッド(プロパティなど)を作る機能を備えたものがありますが、Goの場合は外部から操作されると整合性が壊れてしまうもの以外は、利用者にフィールドへの読み書きを禁止しません ...