在看 Go 语言 select 语法文档的时候文档地址,发现了这样的一条定义。
RecvStmt = [ ExpressionList "=" | IdentifierList ":=" ] RecvExpr .
这条定义我的理解是RecvStmt
可以通过 表达式列表 = RecvExpr
的形式来定义。
对于这里,我感到比较困惑,表达式不应该是用来求值的吗,应该不可以用来赋值。哪位老哥能帮忙解释一下啊,最好能举一个相关的例子,谢谢了。
1
chai2010 2018-07-19 09:43:36 +08:00
同疑问,mark
|
2
torbrowserbridge 2018-07-19 09:48:36 +08:00
```select {
case e, ok := <-ch1: ... case e, ok := <-ch2: ... default: }``` |
3
bwangel OP |
5
neoblackcap 2018-07-19 09:53:29 +08:00
var a []int
var c, c1, c2, c3, c4 chan int var i1, i2 int select { case a[f()] = <-c4: // same as: // case t := <-c4 // a[f()] = t default: print("no communication\n") } |
6
torbrowserbridge 2018-07-19 09:55:23 +08:00
e, ok := <-ch1: 这就是一个 RecvStmt 啊
|
7
heimeil 2018-07-19 10:05:37 +08:00
https://golang.org/ref/spec#Expressions
Expressions 包括很多操作,比如 Index expressions, Address operators |
8
kangkang 2018-07-19 10:39:14 +08:00
表达式也可以是一条定义+一个判断
|
9
reus 2018-07-19 10:43:19 +08:00
表达式不能赋值,但可以给表达式求值的结果赋值
例如 a[0] b.Foo *p 等等 |
10
bwangel OP @heimeil @neoblackcap @torbrowserbridge
感觉你们的回复,我感觉有点懂了,V2ex 的回复不能使用 markdown 太坑爹了,我写在 gist 上了。 https://gist.github.com/bwangelme/ac6783f85687665ede3d46c605eb9bba |
11
torbrowserbridge 2018-07-19 10:58:42 +08:00
赞 LS
|