構造体
構造体(struct)は、さまざまなデータ型(レコード)を組み合わせて宣言します。構造体は、さまざまな変数のリストをメモリの1つのブロックの中でひとつの名前で物理的にグループ化することで、単一のポインタでさまざまな変数にアクセスしたり、同じアドレスを返す名前で宣言された構造体にアクセスしたりできます。
オブジェクト指向プログラミング方面から来た方であればclass
と見なすこともできなくはありませんが、構造体はより制約が多くなっています。
注意: 構造体は(ヒープではなく)スタックに配置されます。
構造体のインスタンスを新たに作成するときには、各フィールドをカンマ,
で区切ることもできます。これはワンライナーでインスタンスを作成するときに便利です。
&
プレフィックス
&
プレフィックス構造体はヒープに配置して参照することもできます。これを行うには、以下のように&
プレフィックスを追加します。
変数user
の型は&User
になり、User
への参照となります。
アクセス指定子
構造体のフィールドはデフォルトで「private」(モジュールの外からアクセスできない)かつ「イミュータブル」です。これはpub
やmut
アクセス指定子で変更できます。
mut:
を指定すると「privateかつミュータブル」にできます。
pub:
を指定すると「publicかつイミュータブル」(リードオンリー)にできます。
pub mut:
を指定すると「public」かつ「親モジュールの中でのみミュータブル」になります。
__global:
を指定すると、親モジュールの中か外かを問わず「publicかつミュータブル」になります。
命名のルール
struct
の名前は常に大文字で始めること。構造体の中の変数(フィールド)については
Snake_Case
にする。
訳注: フィールドのスネークケース縛りは近々変更される可能性あり。
演習
User
の情報を保存して表示する構造体を作成しましょう。x
フィールドとy
フィールドを持つPoint
構造体を作成し、フィールドをそれぞれprivateとpublicにしましょう。
Last updated