The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
bwangel

请教一个 Go 语言的 select 语法问题

  •  
  •   bwangel ·
    bwangelme · Jul 19, 2018 · 2651 views
    This topic created in 2942 days ago, the information mentioned may be changed or developed.

    在看 Go 语言 select 语法文档的时候文档地址,发现了这样的一条定义。

    RecvStmt   = [ ExpressionList "=" | IdentifierList ":=" ] RecvExpr .
    

    这条定义我的理解是RecvStmt可以通过 表达式列表 = RecvExpr 的形式来定义。

    对于这里,我感到比较困惑,表达式不应该是用来求值的吗,应该不可以用来赋值。哪位老哥能帮忙解释一下啊,最好能举一个相关的例子,谢谢了。

    Supplement 1  ·  Jul 19, 2018
    感谢 V 友们的回复,我把我的理解写在了 Gist 上,大家可以参考以下:

    11 replies    2018-07-19 10:58:42 +08:00
    chai2010
        1
    chai2010  
       Jul 19, 2018
    同疑问,mark
    torbrowserbridge
        2
    torbrowserbridge  
       Jul 19, 2018
    ```select {
    case e, ok := <-ch1:
    ...
    case e, ok := <-ch2:
    ...
    default:
    }```
    bwangel
        3
    bwangel  
    OP
       Jul 19, 2018
    @torbrowserbridge

    这个应该是后面一种定义 标识符列表 := RecvStmt
    per
        4
    per  
       Jul 19, 2018 via iPhone
    @bwangel 用表达式不是因为前面预先声明了然后直接赋值吗?
    neoblackcap
        5
    neoblackcap  
       Jul 19, 2018
    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")
    }
    torbrowserbridge
        6
    torbrowserbridge  
       Jul 19, 2018
    e, ok := <-ch1: 这就是一个 RecvStmt 啊
    heimeil
        7
    heimeil  
       Jul 19, 2018
    https://golang.org/ref/spec#Expressions
    Expressions 包括很多操作,比如 Index expressions, Address operators
    y835L9DyC5XD09kq
        8
    y835L9DyC5XD09kq  
       Jul 19, 2018
    表达式也可以是一条定义+一个判断
    reus
        9
    reus  
       Jul 19, 2018
    表达式不能赋值,但可以给表达式求值的结果赋值
    例如
    a[0]
    b.Foo
    *p
    等等
    bwangel
        10
    bwangel  
    OP
       Jul 19, 2018
    @heimeil @neoblackcap @torbrowserbridge

    感觉你们的回复,我感觉有点懂了,V2ex 的回复不能使用 markdown 太坑爹了,我写在 gist 上了。

    https://gist.github.com/bwangelme/ac6783f85687665ede3d46c605eb9bba
    torbrowserbridge
        11
    torbrowserbridge  
       Jul 19, 2018
    赞 LS
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   998 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 18:52 · PVG 02:52 · LAX 11:52 · JFK 14:52
    ♥ Do have faith in what you're doing.