正在学习 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
就跳过这部分的执行吗
1
stevenbipt 2020-07-22 18:11:08 +08:00 1
1>2 这个逻辑导致没有进 if 里面吧?1<2 就能得到预期效果,你代码可能有一丢丢问题
|
2
chiu 2020-07-22 18:12:56 +08:00 via Android
expect 的应该是
if 1 < 2 ? |
3
phpfpm 2020-07-22 18:15:58 +08:00 29
你可能需要再学一下学前班课程。
|
4
kkeiko 2020-07-22 18:16:00 +08:00
标记本来就是代码的一部分,当然会执行,只不过给你一个快捷跳转的机会而已。
|
5
Hoshizora 2020-07-22 18:16:24 +08:00 via Android
及时 return 或者退出
|
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 ``` |
8
kxiaong 2020-07-22 18:19:17 +08:00
把 goto 当 if..else...用了。
但是 label 显然不是那个 else 部分。 |
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") } |
11
useben 2020-07-22 18:37:02 +08:00
go 说, 这个锅我不背... 建议从语言基础学起, 额, 这已经是基础了...
|
12
raaaaaar 2020-07-22 18:41:11 +08:00 via Android
go 里有 goto 么,我还没注意到。。
|
13
byzf 2020-07-22 18:46:05 +08:00
本想进来指点一番, 没想到长了见识.
|
14
xmge 2020-07-22 19:35:56 +08:00
额...........
|
15
labulaka521 2020-07-22 19:41:13 +08:00 via iPhone
如果你用 goland 会有提示的
|
16
16779242 2020-07-22 20:53:01 +08:00
if 1>2{…………}
这个括号里的内容怎么可能得到执行。。。。 |
17
GeruzoniAnsasu 2020-07-22 21:02:36 +08:00
从群里看到截图赶来劝转行
|
18
lxilu 2020-07-22 22:52:53 +08:00 via iPhone
合理使用 goto,不要到处 goto 写成汇编就好了
|
19
ace12 2020-07-22 23:05:28 +08:00
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
|
20
mritd 2020-07-22 23:18:19 +08:00 via iPhone
哈哈哈哈 兄弟可以的 我知道是体育老师教的
|
21
SingeeKing 2020-07-22 23:56:19 +08:00 via iPhone
Go 的 goto 作用只是在多层循环中跳出多级,不是 C 的无限制的跳转,理论上 goto 应当是只定义于一个循环( for 关键字)前的
|
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") } |
23
si 2020-07-23 09:25:32 +08:00 via Android
条件反了,if 是条件为 true 执行,如果要条件不成立的时候执行,就是要条件为 false 到时候执行,那要把条件反过来。
|
24
stephanew 2020-07-23 10:40:57 +08:00
啊这...
|
25
bruce0 2020-07-23 11:15:24 +08:00
if 1>2 这个分支没有进入,所以就没有执行 goto
标签部分的代码 会被顺序执行的, 执行 goto 会直接跳到标签处执行,如果整个过程中没有执行过 goto, 当代码顺序执行到标签处时,也会执行 如果想不出发 goto 就不执行 标签处的代码, 可以使用 if 加标志 变量 判断 |
26
whi147 2020-07-23 15:18:30 +08:00 via iPhone
建议用 do while(0) 想跳出的地方用 break
|
27
CodeCodeStudy 2020-07-23 16:24:02 +08:00
1 大于 2 ?
|
28
juziss 2020-07-23 18:29:20 +08:00
你这......不会是骗回复吧
|