我是一位经验丰富的“老派”程序员,但也是 Go 的初学者。我正在阅读“CreateSpace:Go 编程简介”一书。在第。111,第9章的第三章习题,任务是给用户自定义的Shape接口添加一个新的方法。界面已经在本章的过程中建立起来了,这是我目前所拥有的:
package main
import (
"fmt"
"math"
)
type Shape interface {
area() float64
perimeter() float64
}
type Distance struct {
x1, y1, x2, y2 float64
}
func (d *Distance) distance() float64 {
a := d.x2 - d.x1
b := d.y2 - d.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.x2, d.y2, d.x1, d.y1 = 0, 0, 10, 10
p := new(Perimeter)
p.x1, p.y1 = 0, 0
p.x2, p.y2 = 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 := Circle{0, 0, 5}
fmt.Println(c.area())
}
问题是我收到以下错误(来自编译器?):
user@pc /c/Go/src/golang-book/chapter9/chapterProblems
$ go run interface.go
# command-line-arguments
.\interface.go:25: undefined: distance
.\interface.go:26: undefined: distance
.\interface.go:42: undefined: distance
.\interface.go:43: undefined: distance
.\interface.go:44: undefined: distance
.\interface.go:45: undefined: distance
我花了很多时间重新阅读章节文本并仔细思考这个“未定义:距离”错误可能意味着什么,但到目前为止无济于事。正如你所看到的,我已经定义了一个“距离结构”,创建了一个名为 的 new() 实例,d用.运算符初始化了它的字段,并创建了一个distance()func,但是,很明显,我不是在探索一些相关的部分) 的信息。
慕斯王
喵喔喔
慕桂英546537
相关分类