小编典典

努力查看接口类型的用途

go

我最近喜欢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作为包装器来保存两行代码。

有什么我想念的吗?我使用接口不正确吗?任何帮助或示例,不胜感激。


阅读 294

收藏
2020-07-02

共1个答案

小编典典

接口的要点是您可以进行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)

}

游乐场链接

2020-07-02