2016-03-23 21 views
5
  1. Phiên bản Go nào bạn đang sử dụng (phiên bản đi)? https://play.golang.orgTại sao "const true = false" được cho phép?

  2. Bạn đã làm gì?

Chạy một chương trình nhỏ:

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. đã bạn mong đợi gì để xem?

Thông báo lỗi hoặc cảnh báo tôi đang tạo hằng số với tên đã được xác định và có khả năng phá vỡ toàn bộ ứng dụng.

  1. Thay vào đó bạn thấy gì?

Chạy mà không gặp sự cố. Không có cảnh báo hoặc bất cứ điều gì để ngăn chặn việc tạo hằng số mới với tên đã được xác định.

+1

Điều thú vị. "Var true = false" cho kết quả tương tự. Nhưng khi tôi cố gắng khai báo một gói hoặc nhập khẩu, tôi nhận được lỗi này: "prog.go: 6: lỗi cú pháp: gói không mong muốn, tên dự kiến ​​ prog.go: 6: không thể khai báo tên" – Vityata

+2

Sao chép có thể có của [Tại sao 'mới 'và' làm 'không dành riêng cho từ khoá?] (http://stackoverflow.com/questions/31987772/why-are-new-and-make-not-reserved-keywords) Nó hỏi về 'new' và' make', nhưng 'true' cũng là một [số nhận dạng được khai báo trước] (https://golang.org/ref/spec#Predeclared_identifiers) cũng làm cho câu trả lời áp dụng ở đây. – icza

+2

Không đúng hay sai là từ khóa (https://golang.org/ref/spec#Keywords) nhưng số nhận dạng được khai báo trước (https://golang.org/ref/spec#Predeclared_identifiers) và bạn xác định lại chúng là tốt và hoạt động như toàn bộ ngôn ngữ. – Volker

Trả lời

9

truefalse không phải là từ khóa được đặt trước. Đây là những số nhận dạng được khai báo trước.

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

Điều này có nghĩa rằng truefalse rất đơn giản hai giá trị boolean untyped. Đây là lý do trong ví dụ của bạn true bằng false.

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

Các vấn đề liên quan