为什么" const true = false"允许?

时间:2016-03-23 08:34:53

标签: go

  1. 您使用的是什么版本的Go(去版)? https://play.golang.org

  2. 你做了什么?

  3. 运行一个小程序:

    package main
    
    import "fmt"
    
    const true = false
    
    func main() {
        if (true == false) {
            fmt.Println("True equals to false")
        }
        fmt.Println("Hello World")
    }
    

    https://play.golang.org/p/KwePsmQ_q9

    1. 你期望看到什么?
    2. 错误或警告消息,我使用已定义的名称创建常量,并可能破坏整个应用。

      1. 你看到了什么?
      2. 运行没有问题。没有警告或任何阻止使用已定义名称创建新常量的内容。

1 个答案:

答案 0 :(得分:9)

truefalse不是保留关键字。这些是预先声明的标识符。

const (
        true  = 0 == 0 // Untyped bool.
        false = 0 != 0 // Untyped bool.
)

这意味着truefalse是简单的两个无类型布尔值。这就是您的示例true等于false

的原因

https://golang.org/pkg/builtin/#pkg-constants