【发布时间】:2013-09-17 15:32:39
【问题描述】:
我最近喜欢上了 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())
}
我看不出Circer 界面的用途。这些方法已经编写好了,我可以通过直接在结构上调用它们来节省两行代码,而不是使用 Circer 作为包装器。
我有什么遗漏吗?我是否错误地使用了界面?任何帮助或示例表示赞赏。
【问题讨论】:
-
接口类型的用途?解耦代码。见stackoverflow.com/a/62297796/12817546。 “动态”调用方法。见stackoverflow.com/a/62336440/12817546。访问 Go 包。见stackoverflow.com/a/62278078/12817546。将任何值分配给变量。见stackoverflow.com/a/62337836/12817546。