fmt.Println("One") > case…" />
返回介绍

04.6 switch 语句

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

在本节介绍switch语句主要是因为switch可以用于正则表达式!首先看一段switch代码块:

> switch asString {
>     case "1":
>         fmt.Println("One")
>     case "0":
>         fmt.Println("Zero")
>     default:
>         fmt.Println("Do not care!")
> }

这段代码能够区分不同的asString值所对应的不同操作。

switch代码块设置default子句是非常棒的实践。由于switchcase语句是依赖顺序的,所以default子句总是在最后声明。

switch的使用还可以更加灵活:

switch {

case number < 0:

​ fmt.Println("Less than zero")

case number > 0:

​ fmt.Println("Bigger than zero")

default:

​ fmt.Println("zero")

}

上面的代码块能够在某个数字正数、负数、以及0的情况下执行不同的任务。如你所见,switch的分支语句可以是条件语句,那么其分支语句同样也可以是正则表达式!

关于switch的用法将在switch.go中分5部分展示。

第一部分:

> package main
> 
> import (
>     "fmt"
>     "os"
>     "regexp"
>     "strconv"
> )
> 
> func main() {
>     arguments := os.Args
>     if len(arguments) <2 {
>         fmt.Println("Usage: switch number")
>         os.Exit(1)
>     }

regex包用于生成正则表达。

第二部分代码:

> number, err := strconv.Atoi(arguments[1])
>     if err != nil {
>         fmt.Println("The value is not an integer",number)
>     }else {
>         switch {
>         case number<0:
>             fmt.Println("Less than zero")
>         case number >0:
>             fmt.Println("Bigger than zero")
>         default:
>             fmt.Println("Zero")
>         }
>     }

第三部分代码:

> asString := arguments[1]
>     switch  asString{
>     case "5":
>         fmt.Println("Five")
>     case "0":
>         fmt.Println("Zero")
>     default:
>         fmt.Println("Do not care")
>     }
>

这部分代码说明case子句可以包含硬编码的变量,这种情况通常是switch`后跟有一个变量。

第四部分代码:

> var negative = regexp.MustCompile(`-`)
>     var floatingPoint = regexp.MustCompile(`\d?\.\d`)
>     var mail = regexp.MustCompile(`^[^@]+@[^@.]+\.[^@.]+`)
>     switch {
>     case negative.MatchString(asString):
>         fmt.Println("Negative number")
>     case floatingPoint.MatchString(asString):
>         fmt.Println("Floating Point")
>     case mail.MatchString(asString):
>         fmt.Println("It is an email")
>         fallthrough
>     default:
>         fmt.Println("Something else")
>     }

这部分代码十分有趣。首先,我们定义了3个正则表达negative,floatingPoint,以及mail。然后使用regexp.MatchString()switch中匹配不同的情况。

最后,fallthrough关键字告诉Go执行接下来的分支,即default分支。这意味着无论mail.MatchString(asString)是否成功匹配,default子句都会执行。

最后一部分:

> var aType error = nil
>     switch aType.(type) {
>     case nil:
>         fmt.Println("It is a nil interface")
>     default:
>         fmt.Println("It it not a nil interface")
> 
>     }
> 
> }

这段代码说明switch能够区分不同类型,你将在第7章中了解到接口的知识。执行switch.go将会产生如下输出:

> $ go run switch.go
> Usage: switch number
> exit status 1
> hanshanjiedeMacBook-Pro:chapter4 hanshanjie$ go run switch.go mike@g.com
> The value is not an integer 0
> Do not care
> It is an email
> Something else
> It is a nil interface
> hanshanjiedeMacBook-Pro:chapter4 hanshanjie$ go run switch.go 5
> Bigger than zero
> Five
> Something else
> It is a nil interface
> hanshanjiedeMacBook-Pro:chapter4 hanshanjie$ go run switch.go 0
> Zero
> Zero
> Something else
> It is a nil interface
> hanshanjiedeMacBook-Pro:chapter4 hanshanjie$ go run switch.go 1.2
> The value is not an integer 0
> Do not care
> Floating Point
> It is a nil interface
> hanshanjiedeMacBook-Pro:chapter4 hanshanjie$ go run switch.go -1.5
> The value is not an integer 0
> Do not care
> Negative number
> It is a nil interface
>

>

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

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

发布评论

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