3 回答
TA贡献1864条经验 获得超2个赞
您没有名为distance. 这是一个类型的方法*Distance。您需要先创建一个*Distance,然后调用该方法。
d := &Distance{r.x1, r.y1, r.x2, r.y1}
l := d.distance()
我建议从Effective Go开始。对于“经验丰富的程序员”来说,这是对语言的很好的介绍。
TA贡献1735条经验 获得超5个赞
您在此处定义的函数:
func (d *Distance) distance() float64 {
a := d.x2 - d.x1
b := d.y2 - d.y1
return math.Sqrt(a*a + b*b)
}
是距离对象的一个方法。看起来您正在尝试在此处创建一个新的 Distance 实例:
func (r *Rectangle) area() float64 {
l := distance(r.x1, r.y1, r.x2, r.y1)
w := distance(r.x1, r.y1, r.x1, r.y2)
return l.distance() * w.distance()
}
但你实际上在做的是试图调用一个名为distance.
你要
func (r *Rectangle) area() float64 {
l := &Distance{r.x1, r.y1, r.x2, r.y1}
w := &Distance{r.x1, r.y1, r.x1, r.y2}
return l.distance() * w.distance()
}
TA贡献1848条经验 获得超10个赞
在我的“头脑正确”之后(必须修复几个自己造成的语法错误),以下工作:
<pre><code>
package main
import ("fmt"; "math")
type Shape interface {
area() float64
perimeter() float64
}
type Distance 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)
}
type Rectangle struct {
x1, y1, x2, y2 float64
}
func (r *Rectangle) area() float64 {
l := distance(r.x1, r.y1, r.x2, r.y1)
w := distance(r.x1, r.y1, r.x1, r.y2)
return l * w
}
type Circle struct {
x, y, r float64
}
func (c *Circle) area() float64 {
return math.Pi * c.r*c.r
}
type Perimeter struct {
x1, y1, x2, y2 float64
}
func (p *Perimeter) perimeter() float64 {
s1 := distance(p.x1, p.y1, p.x1, p.y2)
s2 := distance(p.x1, p.y2, p.x2, p.y2)
s3 := distance(p.x2, p.y2, p.x2, p.y1)
s4 := distance(p.x2, p.y1, p.x1, p.y1)
return s1 + s2 + s3 + s4
}
func main() {
d := new(Distance)
d.x1, d.y1, d.x2, d.y2 = 0, 0, 10, 10
p := new(Perimeter)
p.x1, p.y1, p.x2, p.y2 = 0, 0, 10, 10
fmt.Println(p.perimeter())
r := new(Rectangle)
r.x1, r.y1 = 0, 0
r.x2, r.y2 = 10, 10
fmt.Println(r.area())
c := new(Circle)
c.x, c.y, c.r = 0, 0, 5
fmt.Println(c.area())
}
<pre><code>
这是结果输出:
<pre><code>
David Bailey@DAVIDBAILEY-PC /c/Go/src/golang-book/chapter9/chapterProblems
$ go run interface.go
40
100
78.53981633974483
David Bailey@DAVIDBAILEY-PC /c/Go/src/golang-book/chapter9/chapterProblems
$
<pre><code>
再次谢谢你。
- 3 回答
- 0 关注
- 183 浏览
添加回答
举报