返回介绍

07.4.2 Switch 用于类型判断

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

在本小节中,将在Go代码 switch.go 中讲解如何使用 switch 语句来区分不同的数据类型,这将分为四个部分进行介绍。 switch.go 的Go代码部分基于 useInterface.go ,但它将添加另一个名为 rectangle 的类型,不需要实现任何接口的方法。

switch.go 程序的第一部分如下:

> package main
>
> import (
>     "fmt"
> )

由于 switch.go 中的代码不需要实现 myInterface.go 中定义的接口,因此不需要导入 myInterface 包。

switch.go 的第二部分定义了程序中将使用的三种数据类型:

> type square struct {
>     X float64
> }
>
> type circle struct {
>     R float64
> }
>
> type rectangle struct {
>     X float64
>     Y float64
> }

这三种类型都很简单。

switch.go 的第三个代码段如下:

> func tellInterface(x interface{}) {
>     switch v := x.(type) {
>     case square:
>         fmt.Println("This is a square!")
>     case circle:
>         fmt.Printf("%v is a circle!\n", v)
>     case rectangle:
>         fmt.Println("This is a rectangle!")
>     default:
>         fmt.Printf("Unknown type %T!\n", v)
>     }
> }

在这里,实现了一个名为 tellInterface() 的函数,该函数有一个类型为 interface 的参数x

这个函数实现体现了区分不同数据类型的 x```参数。通过使用返回 x元素类型的 `x.(type)` 语句来实现这样的效果。在 `fmt.Printf()` 函数中使用的格式化字符串%v```来获取类型的值。

switch.go 的最后一部分是 main() 函数的实现:

> func main() {
>     x := circle{R: 10}
>     tellInterface(x)
>     y := rectangle{X: 4, Y: 1}
>     tellInterface(y)
>     z := square{X: 4}
>     tellInterface(z)
>     tellInterface(10)
> }

执行 switch.go 将生成以下的输出:

$ go run switch.go
{10} is a circle!
This is a rectangle!
This is a square!
Unknown type int!

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

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

发布评论

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