【Go】structの埋め込みについて

structについてまとめたものです。
structのことを構造体といいます。

基本的な書き方

temperature構造体を作成する。


type temperature struct {
  high, low float64
}

構造体の書き方

構造体の中に構造体を持たせることで、わかりやすくなります。

例えば下記は、report構造体の中身が何で構成されているかが不明瞭です。


type report struct {
	sol         int
	high, low foat64
	lat, long float64
}

下記のように書き換えた場合、report構造体はどういった要素で構成されているかがわかりやすくなります。


type report struct {
	sol         int
	temperature temperature
	location    location
}

全体コード


type celsius float64
type sol int

type temperature struct {
	high, low celsius
}

type location struct {
	lat, long float64
}

// report 構造体は 日にち、気温、場所 の情報を持つ
type report struct {
	sol         int
	temperature temperature
	location    location
}

構造体に構造体を埋め込む

フィールド名を省略することで構造体を埋め込みます。


type report struct {
	sol
	temperature
	location
}

間接的にメソッドにアクセスする

temperature構造体に average メソッドを定義します。


func (t temperature) average() celsius {
	return (t.high + t.low) / 2
}

ここで、report構造体は、temperature構造体を埋め込んでいるので、
以下のようにtemperatureのメソッドにアクセスすることができます。


fmt.Println(report.temperature.average())

また、以下のように書くことで、reportがaverage メソッドを持っているかのようにできます。


func (r report) average() celsius {
	return r.temperature.average()
}

func main() {
  fmt.Println(report.average())
}
Go