我最近喜欢Go编程语言,到目前为止我发现它很精彩,但我真的很难理解接口.我已经阅读了很多关于它们的内容,但它们对我来说似乎仍然非常抽象.
我写了一些使用以下界面的代码:
package main
import (
"fmt"
"math"
)
type Circer interface {
Circ() float64
}
type Square struct {
side float64
}
type Circle struct {
diam, rad float64
}
func (s *Square) Circ() float64 {
return s.side * 4
}
func (c *Circle) Circ() float64 {
return c.diam * math.Pi
}
func (c *Circle) Area() float64 {
if c.rad == 0 {
var rad = c.diam / 2
return (rad*rad) * math.Pi
} else {
return (c.rad*c.rad) * math.Pi
}
}
func main() {
var s = new(Square)
var c = new(Circle)
s.side = 2
c.diam = 10
var i Circer = s
fmt.Println("Square Circ: ", i.Circ())
i = c
fmt.Println("Circle Circ: ", i.Circ())
}
Run Code Online (Sandbox Code Playgroud)
我无法真正看到Circer界面的目的.这些方法已经编写好了,我可以直接在结构上调用它们来保存两行代码,而不是使用Circer作为包装器.
有什么我想念的吗?我是否错误地使用了界面?任何帮助或示例表示赞赏.
接口的关键是你可以制作ShowMeTheCircumference如下的通用功能.
package main
import (
"fmt"
"math"
)
type Circer interface {
Circ() float64
}
type Square struct {
side float64
}
type Circle struct {
diam, rad float64
}
func (s *Square) Circ() float64 {
return s.side * 4
}
func (c *Circle) Circ() float64 {
return c.diam * math.Pi
}
func ShowMeTheCircumference(name string, shape Circer) {
fmt.Printf("Circumference of %s is %f\n", name, shape.Circ())
}
func main() {
square := &Square{side: 2}
circle := &Circle{diam: 10}
ShowMeTheCircumference("square", square)
ShowMeTheCircumference("circle", circle)
}
Run Code Online (Sandbox Code Playgroud)