bam6o0の記憶域

忘備録になればいいな

Go言語の勉強記録14bit

構造体

  • フィールドと呼ばれる要素の集合体
  • 各フィールドはそれぞれ名前と型を持つ
  • データの構造を定義する時に使う。
  • フィールドにアクセスするときはフィールドを持つ値の後ろに.を記述し、その後ろにフィールド名を記述する。
  • 先頭一文字を大文字にするとエクスポート

構造体型の書式

  • 書式
struct {
  //フィールドの宣言
} 

実行結果

$go run struct.go
{1 2 3.14 go}

構造体に名前をつける

  • typeキーワードを使用して名前を付ける。
type MyDate struct{
  s string
  b byte
}

ブランクフィールド

  • フィールド名にブランク識別子を使用できる。
  • ブランクフィールドと呼ばれる
  • メモリ領域として確保は必要だが、実際にそのフィールドにアクセスすることはないということを明示的に表すために使用
  • パディングなど
  • 構造体内に同一の名前を持つフィールドは宣言できないが、ブランクフィールドは複数宣言可能
  • 書式
struct {
  b1 byte
  _  byte
  b2 [5]byte
  _  byte
}

匿名フィールと埋め込み

  • フィールドの宣言が型だけ、フィールド名を省略した時匿名フィールドとなる。
  • 型の名前がそのフィールド名となる
  • 書式
struct {
  int
  uint64
  *byte
}
  • 匿名フィールドが持つフィールドとメソッドが、埋め込み先の構造体型にも実装されているかのように扱われるから。
  • 継承ににてる

実行結果

$go run embed.go
test.doSomething()
0

構造体の初期化

  • 構造体リテラルを使うと宣言と同時に変数を初期化できる。

実行結果

$go run struct_init.go
{Jhon 23} {Tom 32} {Jane 42} &{Mike 36}