美文网首页
golang容易掉进的坑(一)

golang容易掉进的坑(一)

作者: 陀氏 | 来源:发表于2019-06-27 14:32 被阅读0次

案例一 switch-case会自动结束

下面这段代码会出现什么结果呢?

func test(a int) string {
    switch a {
    case 4:
    case 3:
        return "hit"
    }
    panic("noooo")
}

func main() {
    fmt.Println(test(4))
}
image.gif

如果在其它语言中,结果是打印出hit并结束程序,而在golang中将会产生panic异常

原因是golang会在每个case结束时自动break掉,因此a=4时并不会return "hit"而是什么也不做。

对于这一点官方的解释是:

Go 的 switch 语句类似于 C、C++、Java、JavaScript 和 PHP 中的,不过 Go 只运行选定的 case,而非之后所有的 case。 实际上,Go 自动提供了在这些语言中每个 case 后面所需的 break 语句。 除非以 fallthrough 语句结束,否则分支会自动终止。

案例二 for循环时参数变化

func main() {
    a := []int{1,2,3,4}
    for i := range a {
        go func () {
            fmt.Println(i, a[i])
        }()
    }
    time.Sleep(1 * time.Second)
}
image.gif

以上代码在我本地运行,打出的是:

3 4
3 4
3 4
3 4
image.gif

这是由于在循环中位置变量i是唯一的,在循环中每次执行go fun()中使用到的i是同一个,在fmt.Println(i, a[i])时i值已经是不确定的。

相关文章

  • golang容易掉进的坑(一)

    案例一 switch-case会自动结束 下面这段代码会出现什么结果呢? 如果在其它语言中,结果是打印出hit并结...

  • 学钢琴容易掉进的坑

    为什么要学钢琴? ——纯粹是因为孩子喜欢 怎么学? ——报个兴趣班就可以开始了,我们不要求考级,只是当成兴...

  • golang坑之 'godoc' 不是内部或外部命令,...

    @[TOC](golang坑之 'godoc' 不是内部或外部命令,...) golang坑之 'godoc' 不...

  • 我在这座城市受过很深的伤

    人似乎都有同一种惯性,容易掉进同一坑,又无力爬出。是的!我就是这样,一直掉进同一个坑,喜欢的东西,喜欢的人千篇一律...

  • windows server上 gorm 连接DB提示 the

    友情提示:window server上很容易就踩坑 1. 背景 语言:golang ORM: gorm 运行环境:...

  • golang 新手容易遇到的坑

    Golang Range关键字的秘密

  • 注意力

    我们每个人的生活经历中,或多或少都掉进过一些“坑”里。有的坑很深,一旦掉进去,就爬不出来了;有的坑很浅,掉进...

  • 典型的隐形大坑有三个

    提要 我们每个人的生活经历中,或多或少都掉进过一些“坑”里。有的坑很深,一旦掉进去,就爬不出来了;有的坑很浅,掉进...

  • 你最宝贵的财富是什么?

    我们在生活中可能会不经意掉到坑里,坑深掉进去,不容易爬出来,有些坑很浅,轻易的爬出来了,还有一些隐形坑掉进去了,自...

  • 装修的坑,这些年你经历了什么

    我们每个人的生活经历中,或多或少都掉进过一些“坑”里。 有的坑很深,一旦掉进去,就爬不出来了; 有的坑很浅,掉进去...

网友评论

      本文标题:golang容易掉进的坑(一)

      本文链接:https://www.haomeiwen.com/subject/bvcrcctx.html