more
This commit is contained in:
parent
03c8a4983a
commit
dd98c20446
@ -1,22 +1,51 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
import "math"
|
||||
|
||||
type Person struct {
|
||||
Name string
|
||||
type Shape interface {
|
||||
area() float64
|
||||
}
|
||||
|
||||
func (p *Person) Talk() {
|
||||
fmt.Println("Hi, my name is", p.Name)
|
||||
type Circle struct {
|
||||
x, y, r float64
|
||||
}
|
||||
|
||||
type Android struct {
|
||||
Person
|
||||
Model string
|
||||
func (c *Circle) area() float64 {
|
||||
return math.Pi * c.r*c.r
|
||||
}
|
||||
|
||||
type Rectangle struct {
|
||||
x1, y1, x2, y2 float64
|
||||
}
|
||||
|
||||
func distance(x1, y1, x2, y2 float64) float64 {
|
||||
a := x2 - x1
|
||||
b := y2 - y1
|
||||
return math.Sqrt(a*a + b*b)
|
||||
}
|
||||
|
||||
func (r *Rectangle) area() float64 {
|
||||
l := distance(r.x1, r.y1, r.x1, r.y2)
|
||||
w := distance(r.x1, r.y1, r.x2, r.y1)
|
||||
return l * w
|
||||
}
|
||||
|
||||
func totalArea(shapes ...Shape) float64 {
|
||||
var area float64
|
||||
for _, s := range shapes {
|
||||
area += s.area()
|
||||
}
|
||||
return area
|
||||
}
|
||||
|
||||
func main() {
|
||||
android := new(Android)
|
||||
android.Name = "Milo"
|
||||
android.Talk()
|
||||
circle := Circle{x: 0, y: 3, r: 5}
|
||||
rectangle := Rectangle {x1: 3, x2: 10, y1: 5, y2: 7}
|
||||
|
||||
area := 0.0
|
||||
for _, s := range []Shape{&circle, &rectangle} {
|
||||
area += s.area()
|
||||
}
|
||||
fmt.Println(area)
|
||||
}
|
||||
|
7
35-interfaces.go
Normal file
7
35-interfaces.go
Normal file
@ -0,0 +1,7 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
type Shape interface {
|
||||
area() float64
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user