我不明白这里的评估规则

时间:2019-08-14 20:48:34

标签: go

我对Go中的语法用法感到困惑。

func f(){
    m := map[int]string{1: "one", 2: "two"}
    if x, ok := m[3]; !ok{
        // do something
    }
}

我了解if x, ok := map[3]的作用,但是对于结尾处有; !ok; ok之间的区别以及两者的含义感到困惑。

顺便说一句,如果我只写if x, ok := map[3]而没有;扩展它是否有效?

谢谢!

1 个答案:

答案 0 :(得分:1)

  

顺便说一句,如果我只写if x, ok := map[3]而没有;扩展它是否有效?

否,这是语法错误,因为x, ok := map[3]不是布尔表达式。实际上,它甚至不是一个表达; a short variable declaration is a statement。因此它不能是控制if的表达式。

  

但是我对结尾处有; !ok; ok之间的区别以及两者的含义感到困惑。

与任何if相同。如果希望在ok为true时运行块,请使用if ok。如果希望在ok为false时运行该块,请使用if !ok。唯一的区别是,我们在单词ok和测试之间放置了赋予if值的语句。