golang構造体の埋め込みタイプとインタフェース

2220 ワード

構造体の埋め込みタイプ
1.埋め込み構造体1
package main

import "fmt"

type Person struct {
	name string
}

type Student struct {
	class int
	person Person         // person  Person
}


func main(){
	s := Student{1,Person{"xiaoming"}}
	fmt.Println("name :",s.person.name)  // 

}
// :
name : xiaoming

2、埋め込み構造体2
package main

import "fmt"

type Person struct {
	name string
}

type Student struct {
	class int
	Person          // Person Student
}


func main(){
	s := Student{1,Person{"xiaoming"}}
	fmt.Println("name :",s.name)  // s.name  s.person.name

}
// :
name: xiaoming

インタフェース
1、インタフェースの定義
go言語では、インタフェースはタイプを定義する一連のメソッドのリストであり、1つのタイプがインタフェースのすべてのメソッドを実現した場合、そのタイプはインタフェースに合致する.
package main

import "fmt"
import "math"


type Shape interface {
	area() float64

}

type Rectangle struct {
	width float64
	height float64
}

type Circle struct {
	radius float64
}

func (r Rectangle) area() float64 {
	return r.height * r.width
}

func (c Circle) area() float64 {
	return math.Pi * math.Pow(c.radius,2)
}

func getArea(shape Shape) float64 {
	return shape.area()
}

func main(){
	r := Rectangle{20,10}
	c := Circle{4}
	fmt.Println("Rectangle Area =",getArea(r))
	fmt.Println("Circle Area =",getArea(c))

}
// :
Rectangle Area = 200
Circle Area = 50.26548245743669

2、インタフェースの埋め込み
package main

import "fmt"
import "math"


type Shape interface {
	area() float64

}

type MultiShape interface {
	Shape            // 
}

type Rectangle struct {
	width float64
	height float64
}

type Circle struct {
	radius float64
}

func (r Rectangle) area() float64 {
	return r.height * r.width
}

func (c Circle) area() float64 {
	return math.Pi * math.Pow(c.radius,2)
}

func getArea(shape MultiShape) float64 {        // MultiShape
	return shape.area()
}

func main(){
	r := Rectangle{20,10}
	c := Circle{4}
	fmt.Println("Rectangle Area =",getArea(r))
	fmt.Println("Circle Area =",getArea(c))

}
// :
Rectangle Area = 200
Circle Area = 50.26548245743669        // 

転載先:https://blog.51cto.com/qiyishi/1903029