为什么允许使用”const true = false”这样的语句?

huangapple go评论129阅读模式
英文:

Why is "const true = false" allowed?

问题

  1. 你正在使用哪个版本的Go(go version)?
    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")
}

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

  1. 你期望看到什么?

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

  1. 相反,你看到了什么?

程序正常运行,没有任何警告或阻止创建具有已定义名称的新常量的提示。

英文:
  1. What version of Go are you using (go version)?
    https://play.golang.org

  2. What did you do?

Run a small program:

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. What did you expect to see?

Error or warning message that I'm creating constant with already defined name, and potentially breaking whole app.

  1. What did you see instead?

Running without a problem. No warnings or anything to prevent creating new constant with already defined name.

答案1

得分: 10

truefalse不是保留关键字,它们是预声明的标识符。

const (
        true  = 0 == 0 // 无类型布尔值。
        false = 0 != 0 // 无类型布尔值。
)

这意味着truefalse是两个简单的无类型布尔值。这就是为什么在你的例子中true等于false的原因。

更多信息请参考:https://golang.org/pkg/builtin/#pkg-constants

英文:

true and false are not reserved keywords. These are predeclared identifiers.

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

This means that true and false are simple two untyped boolean values. This is the reason that in your example true is equal to false.

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

huangapple
  • 本文由 发表于 2016年3月23日 16:34:52
  • 转载请务必保留本文链接:https://go.coder-hub.com/36173222.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定