返回介绍

07.4.1 接口的使用

发布于 2024-08-14 12:50:32 字数 4561 浏览 0 评论 0 收藏 0

本小节将教您如何在名为 useInterface.go 的Go程序中使用 myInterface.go 中定义的接口,该程序将分五部分介绍。

useInterface.go 的第一部分在以下Go代码中:

> package main
> 
> import (
>     "fmt"
>     "math"
>     "myInterface"
> )
>
> type square struct {
>     X float64
> }
>
> type circle struct {
>     R float64
> }

由于所需的接口定义在它自己的包中,所以需要导入 myInterface 包。

useInterface.go 的第二个代码部分包含以下代码:

> func (s square) Area() float64 {
>     return s.X * s.X
> }
>
> func (s square) Perimeter() float64 {
>     return 4 * s.X
> }

在本部分中,类型 square 实现了 shape 接口。

第三部分包含以下Go代码:

> func (s circle) Area() float64 {
>     return s.R * s.R * math.Pi
> }
>
> func (s circle) Perimeter() float64 {
>     return 2 * s.R * math.Pi
> }

在本部分中,类型 circle 实现了 shape 接口。

useInterface.go 的第四部分包含以下Go代码:

> func Calculate(x myInterface.Shape) {
>     _, ok := x.(circle)
>     if ok {
>         fmt.Println("Is a circle!")
>     }
>
>     v, ok := x.(square)
>     if ok {
>         fmt.Println("Is a square:", v)
>     }
>
>     fmt.Println(x.Area())
>     fmt.Println(x.Perimeter())
> }

在上面的代码中,实现了一个需要 shape 参数( myInterface.Shape )的函数。这里需要理解注意的是函数参数是任何 shape 类型的参数,也就是实现 shape 接口的类型!

函数开头的代码展示了如何区分实现接口的数据类型。在第二个代码块中,将看到如何获取存储在 square 参数中的值。对实现 myInterface.Shape 的任何类型都可以使用这样的方式。

最后一个代码段包括以下代码:

> func main() {
>     x := square{X: 10}
>     fmt.Println("Perimeter:", x.Perimeter())
>     Calculate(x)
>     y := circle{R: 5}
>     Calculate(y)
> }

在本部分中,将展示如何使用 circlesquare 变量作为前面实现的 Calculate() 函数的参数。

如果执行 useInterface.go ,将得到以下输出:

$ go run useInterface.go
Perimeter: 40
Is a square: {10}
100
40
Is a circle!
78.53981633974483
31.41592653589793

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文