構造体

構造体 #

構造体を定義する #

構造体は名前が大文字始まりなら他のパッケージから読める「公開」状態となり、それ以外なら「非公開」となる。 フィールド名も同様に大文字なら「公開」それ以外なら「非公開」となる。

package main

import (
	"fmt"
)

// 「type 構造体名 struct」で構造体の宣言
type S1 struct {
	// フィールドの定義は「フィールド名 型名」
	V1 int
	V2 string
}

type s2 struct {
	V1 bool
	v2 string
}

func main() {
	fmt.Printf("%#v\n", S1{}) // main.S1{V1:0, V2:""}
	fmt.Printf("%#v\n", s2{}) // main.s2{V1:false, v2:""}
}
play_circleRun open_in_newRun In The Playground

構造体を初期化する #

package main

import (
	"fmt"
)

type S struct {
	V1 int
	V2 string
}

func main() {
	// 変数宣言で初期化
	var s0 S
	fmt.Printf("%#v\n", s0) // == main.S{V1:0, V2:""}

	// 初期化時に値を入れる
	s1 := S{
		V1: 100,
		V2: "aaa",
	}
	fmt.Printf("%#v\n", s1) // == main.S{V1:100, V2:"aaa"}

	// 構造体のポインタの初期化
	s2 := &S{
		V1: 100,
		V2: "aaa",
	}
	fmt.Printf("%#v\n", s2) // == &main.S{V1:100, V2:"aaa"}

	// new を使った構造体のポインタの初期化
	s3 := new(S)
	fmt.Printf("%#v\n", s3) // == &main.S{V1:0, V2:""}
}
play_circleRun open_in_newRun In The Playground

構造体のフィールドの値の取得と更新をする #

package main

import (
	"fmt"
)

type S struct {
	V1 int
	V2 string
}

func main() {
	s1 := S{V1: 100, V2: "aaa"}

	// 値の取得
	v1 := s1.V1
	fmt.Println(v1) // == 100

	// 値の更新
	s1.V2 = "bbb"
	fmt.Printf("%#v", s1) // == main.S{V1:100, V2:"bbb"}
}
play_circleRun open_in_newRun In The Playground