V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
kayseen
V2EX  ›  Go 编程语言

golang 中使用 goto 跳出 if 语句

  •  
  •   kayseen · 2020-07-22 18:04:59 +08:00 · 4736 次点击
    这是一个创建于 1366 天前的主题,其中的信息可能已经有所发展或是发生改变。

    正在学习 golang, 碰到了一个关于 goto 的问题 比如 if 条件判断, 如果不满足条件判断, goto 到指定位置

    func main() {
    
    	fmt.Println("1")
    
    	if 1 > 2 {
    		goto End
    	}
    
    	fmt.Println("2")
    
    End:
    	fmt.Println("3")
    
    }
    

    真正执行的结果是:

    1
    2
    3
    

    预期的结果应该是:

    1
    3
    

    也就是说定义的End:部分, 不管你有没有goto到这里都会执行, 请问有什么方式可以选择如果不goto就跳过这部分的执行吗

    28 条回复    2020-07-23 18:29:20 +08:00
    stevenbipt
        1
    stevenbipt  
       2020-07-22 18:11:08 +08:00   ❤️ 1
    1>2 这个逻辑导致没有进 if 里面吧?1<2 就能得到预期效果,你代码可能有一丢丢问题
    chiu
        2
    chiu  
       2020-07-22 18:12:56 +08:00 via Android
    expect 的应该是
    if 1 < 2 ?
    phpfpm
        3
    phpfpm  
       2020-07-22 18:15:58 +08:00   ❤️ 29
    你可能需要再学一下学前班课程。
    kkeiko
        4
    kkeiko  
       2020-07-22 18:16:00 +08:00
    标记本来就是代码的一部分,当然会执行,只不过给你一个快捷跳转的机会而已。
    Hoshizora
        5
    Hoshizora  
       2020-07-22 18:16:24 +08:00 via Android
    及时 return 或者退出
    pushback
        6
    pushback  
       2020-07-22 18:18:13 +08:00
    @phpfpm 哈哈哈哈
    jiangbingo
        7
    jiangbingo  
       2020-07-22 18:18:36 +08:00
    ```go

    package main

    import (
    "fmt")
    func main() {

    fmt.Println("1")
    flag := false
    if 1 > 2 {
    flag = true
    goto End
    }

    fmt.Println("2")

    End:
    if flag == true{
    fmt.Println("3")
    }


    }
    ````

    ```
    λ go run goto.go
    1
    2
    ```
    kxiaong
        8
    kxiaong  
       2020-07-22 18:19:17 +08:00
    把 goto 当 if..else...用了。
    但是 label 显然不是那个 else 部分。
    wysnylc
        9
    wysnylc  
       2020-07-22 18:19:35 +08:00
    @phpfpm #3 然后再学下小学课程 <不要使用 goto>
    jiangbingo
        10
    jiangbingo  
       2020-07-22 18:20:58 +08:00
    import (
    "fmt")
    func main() {

    fmt.Println("1")
    if 1 > 2 {
    goto End
    }

    fmt.Println("2")
    return

    End:
    fmt.Println("3")
    }
    useben
        11
    useben  
       2020-07-22 18:37:02 +08:00
    go 说, 这个锅我不背... 建议从语言基础学起, 额, 这已经是基础了...
    raaaaaar
        12
    raaaaaar  
       2020-07-22 18:41:11 +08:00 via Android
    go 里有 goto 么,我还没注意到。。
    byzf
        13
    byzf  
       2020-07-22 18:46:05 +08:00
    本想进来指点一番, 没想到长了见识.
    xmge
        14
    xmge  
       2020-07-22 19:35:56 +08:00
    额...........
    labulaka521
        15
    labulaka521  
       2020-07-22 19:41:13 +08:00 via iPhone
    如果你用 goland 会有提示的
    16779242
        16
    16779242  
       2020-07-22 20:53:01 +08:00
    if 1>2{…………}
    这个括号里的内容怎么可能得到执行。。。。
    GeruzoniAnsasu
        17
    GeruzoniAnsasu  
       2020-07-22 21:02:36 +08:00
    从群里看到截图赶来劝转行
    lxilu
        18
    lxilu  
       2020-07-22 22:52:53 +08:00 via iPhone
    合理使用 goto,不要到处 goto 写成汇编就好了
    ace12
        19
    ace12  
       2020-07-22 23:05:28 +08:00
    哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
    mritd
        20
    mritd  
       2020-07-22 23:18:19 +08:00 via iPhone
    哈哈哈哈 兄弟可以的 我知道是体育老师教的
    SingeeKing
        21
    SingeeKing  
       2020-07-22 23:56:19 +08:00 via iPhone
    Go 的 goto 作用只是在多层循环中跳出多级,不是 C 的无限制的跳转,理论上 goto 应当是只定义于一个循环( for 关键字)前的
    explore365
        22
    explore365  
       2020-07-23 06:34:18 +08:00
    func main() {

    fmt.Println("1")

    if 1 > 2 {
    nitemegeiwotiao End
    }

    fmt.Println("1>2??? tiaonima!")

    End:
    fmt.Println("233333333333")

    }
    si
        23
    si  
       2020-07-23 09:25:32 +08:00 via Android
    条件反了,if 是条件为 true 执行,如果要条件不成立的时候执行,就是要条件为 false 到时候执行,那要把条件反过来。
    stephanew
        24
    stephanew  
       2020-07-23 10:40:57 +08:00
    啊这...
    bruce0
        25
    bruce0  
       2020-07-23 11:15:24 +08:00
    if 1>2 这个分支没有进入,所以就没有执行 goto

    标签部分的代码 会被顺序执行的, 执行 goto 会直接跳到标签处执行,如果整个过程中没有执行过 goto, 当代码顺序执行到标签处时,也会执行

    如果想不出发 goto 就不执行 标签处的代码, 可以使用 if 加标志 变量 判断
    whi147
        26
    whi147  
       2020-07-23 15:18:30 +08:00 via iPhone
    建议用 do while(0) 想跳出的地方用 break
    CodeCodeStudy
        27
    CodeCodeStudy  
       2020-07-23 16:24:02 +08:00
    1 大于 2 ?
    juziss
        28
    juziss  
       2020-07-23 18:29:20 +08:00
    你这......不会是骗回复吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1355 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 17:34 · PVG 01:34 · LAX 10:34 · JFK 13:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.