我最近喜欢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作为包装器来保存两行代码。
有什么我想念的吗?我使用接口不正确吗?任何帮助或示例,不胜感激。
接口的要点是您可以进行ShowMeTheCircumference如下所示的通用功能。
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) }
游乐场链接