GO 中 switch 表达式后加 true 的含义

44 views
Skip to first unread message

北极狐

unread,
Jul 18, 2012, 9:11:37 PM7/18/12
to golang...@googlegroups.com
下面代码中
18            switch nr, er := f.Read(buf[:]); true {
这一行中,后面加入true的含义是什么??

17          for {
18            switch nr, er := f.Read(buf[:]); true {
19            case nr < 0:
20                fmt.Fprintf(os.Stderr, "cat: error reading from %s: %s\n", f.String(), er.String())
21                os.Exit(1)
22            case nr == 0:  // EOF
23                return
24            case nr > 0:
25                if nw, ew := file.Stdout.Write(buf[0:nr]); nw != nr {
26                    fmt.Fprintf(os.Stderr, "cat: error writing from %s: %s\n", f.String(), ew.String())
27                }
28            }
29        } 

Specode

unread,
Jul 18, 2012, 10:45:39 PM7/18/12
to golang...@googlegroups.com
http://tour.golang.org/#43
看这里,写true和不写是一样的

--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina



--
Freedom|Share|Focus|Persistent

北极狐

unread,
Jul 18, 2012, 11:39:58 PM7/18/12
to golang...@googlegroups.com
恩,此时就类似于 if-else ,case中均是 条件表达式,但如果将 true 改为 false,又是什么意思,我测试了 false,发现也进入了 switch 里面,但结果就是乱七八糟的。。。

Leo Jay

unread,
Jul 19, 2012, 12:32:25 AM7/19/12
to golang...@googlegroups.com
On Thu, Jul 19, 2012 at 11:39 AM, 北极狐 <bjh...@gmail.com> wrote:
>
> 恩,此时就类似于 if-else ,case中均是 条件表达式,但如果将 true 改为 false,又是什么意思,我测试了
> false,发现也进入了 switch 里面,但结果就是乱七八糟的。。。
>

switch就是if else chain。拿switch的表达式挨个跟case里的表达式比较,如果相等就执行case里的语句。
比方说这个switch
switch a:=5; true {
case a < 5:
println("a < 5")
case a > 5:
println("a > 5")
case a == 5:
println("a == 5")
}
等价于
if a := 5; true == (a < 5) {
println("a < 5")
} else if true == (a > 5) {
println("a > 5")
} else if true == (a == 5) {
println("a == 5")
}

自然地,如果你把switch里的true写成false,那这个switch就等价于

if a := 5; false == (a < 5) {
println("a < 5")
} else if false == (a > 5) {
println("a > 5")
} else if false == (a == 5) {
println("a == 5")
}


--
Best Regards,
Leo Jay

北极狐

unread,
Jul 19, 2012, 3:36:03 AM7/19/12
to golang...@googlegroups.com
thank you! 
明白了,开始虽然知道这样是 if-else chain,但没有搞明白原理。
Reply all
Reply to author
Forward
0 new messages