April 2022
Beginner to intermediate
464 pages
6h 44m
Japanese
これまで構造体の基本的な定義の仕方、メソッドの定義について紹介しました。この中で、複数の階層を持った構造体の作り方も紹介しました。
これとは別に、多くのモデル構造体を作成するときなど、複数階層ではなく1つの階層で共通部分を使いまわしたいことがあります。そのようなニーズに対するソリューションとして、Goは構造体の埋め込みを提供しています1。
埋め込みには、名前をつけずに型だけを構造体のフィールドとして記述します。
type Book struct {
Title string
ISBN string
}
func (b Book) GetAmazonURL() string {
return "https://amazon.co.jp/dp/" + b.ISBN
}
type OreillyBook struct {
Book
ISBN13 string
}
func (o OreillyBook) GetOreillyURL() string {
return "https://www.oreilly.co.jp/books/" + o.ISBN13 + "/"
}
OreillyBook構造体をこのように宣言すると、インスタンス利用時には埋め込んだBook構造体のフィールドが、あたかも一緒に宣言されたもののようにふるまいます。ただし「同じような」挙動をするのは、あくまでもフィールドの参照とメソッドを呼び出すインスタンスの利用時のみです。インスタンス作成時には型名と同名のフィールドが存在するように書く必要があります。
ob := OreillyBook{
ISBN13: "9784873119038",
Book:Read now
Unlock full access