golang構造体の埋め込みタイプとインタフェース
2220 ワード
構造体の埋め込みタイプ
1.埋め込み構造体1
2、埋め込み構造体2
インタフェース
1、インタフェースの定義
go言語では、インタフェースはタイプを定義する一連のメソッドのリストであり、1つのタイプがインタフェースのすべてのメソッドを実現した場合、そのタイプはインタフェースに合致する.
2、インタフェースの埋め込み
転載先:https://blog.51cto.com/qiyishi/1903029
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