2016-03-23 56 views
5
  1. 您使用的是哪個版本的Go(版本)? https://play.golang.org爲什麼允許「const true = false」?

  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

    有趣的事情。 「Var true = false」給出了相同的結果。但是,當我嘗試聲明一個包或導入時,我得到此錯誤:「prog.go:6:語法錯誤:意外的包,期待名稱 prog.go:6:不能聲明名稱」 – Vityata

    +2

    可能重複[爲什麼是'新'和'使'不保留關鍵字?](http://stackoverflow.com/questions/31987772/why-are-new-and-make-not-reserved-keywords)它詢問'新'和'make',但是'true'也是[預先聲明的標識符](https://golang.org/ref/spec#Predeclared_identifiers),這也使得這裏的答案也適用。 – icza

    +2

    關鍵字(https://golang.org/ref/spec#Keywords)既不是真的也不是假的,但是預先聲明的標識符(https://golang.org/ref/spec#Predeclared_identifiers)並且你重新定義了它們,它們很好,整個語言。 – Volker

    回答

    9

    truefalse不是保留關鍵字。這些是預先聲明的標識符。

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

    這意味着truefalse是簡單的兩個無類型布爾值。這就是在你的例子中true等於false的原因。

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

    相關問題