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

Zho*_*art 5 go

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

  2. 你做了什么?

运行一个小程序:

package main

import "fmt"

const true = false

func main() {
    if (true == false) {
        fmt.Println("True equals to false")
    }
    fmt.Println("Hello World")
}
Run Code Online (Sandbox Code Playgroud)

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

  1. 你期望看到什么?

错误或警告消息,我正在使用已定义的名称创建常量,并可能破坏整个应用程序.

  1. 你看到了什么?

运行没有问题.没有任何警告或任何东西阻止使用已定义的名称创建新常量.

End*_*imo 9

true并且false不是保留关键字.这些是预先声明的标识符.

const (
        true  = 0 == 0 // Untyped bool.
        false = 0 != 0 // Untyped bool.
)
Run Code Online (Sandbox Code Playgroud)

这意味着,truefalse是简单的两个类型化布尔值.这就是你的例子true中等于的原因false.

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