0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

構造体の埋め込み

Goでは構造体の中に構造体を持たせることによってオブジェクト指向プログラミングにおける継承のようなことができる。
これを埋め込み(Embedded)という。

埋め込みの方法

まず、Vertex構造体を作成する。

type Vertex struct {
    x,y int
}

func (v Vertex) Area() int {
    return v.x * v.y
}

func (v Vertex) Scale(i int){
    v.x = v.x * i
    v.y = v.y * i
}

新しくVeretx3Dという構造体を作成し、その中にVertexをかく。これでVeretx3DはVertexの値であるxとyも持っている状態になる。また、Veretx3Dにはint型のzも加える。Area3DメソッドやScale3Dメソッドの作成時もx,y,zを使用するようにする。

type Vertex3D struct {
    Vertex           //構造体の中に構造体を入れる
    z int
}

func (v Vertex3D) Area3D() int {
    retrun v.x * v.y * v.z
}

func (v Vertex3D) Scale3D(i int) {
    v.x = v.x * i
    v.y = v.y * i
    v.z = v.z * i
}

New関数は引数にzを加え、返り値をVeretx3Dにする。

func New(x,y,z int) *Vertex3D {
    retrun &Vertex3D{Vetex{x,y},z}
}

main関数内でNew関数を実行し、VertexとVeretx3Dのメソッドをそれぞれ実行してみる。

func main() {
    v := New(3.4.5)
    v.Scalte(10)
    fmt.Println(v.Area())
    fmt.Println(v.Area3D())
}

//以下のように出力される
1200
6000

学習に使用した教材

・『入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)』M.A EduTech
https://www.udemy.com/course/golang-webgosql/?utm_medium=udemyads&utm_source=bene-msa&utm_campaign=responsive&utm_content=top-1&utm_term=general&msclkid=81e2f24a32cc185d275d953d60760226&couponCode=NEWYEARCAREERJP

・『シリコンバレー一流プログラマーが教える Goプロフェッショナル大全』酒井 潤 (著)
https://www.amazon.co.jp/%E3%82%B7%E3%83%AA%E3%82%B3%E3%83%B3%E3%83%90%E3%83%AC%E3%83%BC%E4%B8%80%E6%B5%81%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E3%81%8C%E6%95%99%E3%81%88%E3%82%8B-Go%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E5%A4%A7%E5%85%A8-%E9%85%92%E4%BA%95-%E6%BD%A4/dp/4046070897

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?