Quale versione di Go stai usando (vai versione)? https://play.golang.orgPerché è consentito "const true = false"?
Cosa hai fatto?
eseguire un piccolo programma:
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
- cosa ti aspettavi di vedere?
Messaggio di errore o avviso che sto creando una costante con nome già definito e potenzialmente interrompendo l'intera app.
- Cosa hai visto invece?
In esecuzione senza problemi. Nessun avviso o altro per impedire la creazione di una nuova costante con un nome già definito.
Divertente. "Var true = false" dà lo stesso risultato. Ma quando provo a dichiarare un pacchetto o un'importazione ottengo questo errore: "prog.go: 6: errore di sintassi: pacchetto inaspettato, in attesa del nome prog.go: 6: impossibile dichiarare il nome" – Vityata
Possibile duplicato di [Perché sono 'nuovi 'e' make 'parole chiave non riservate?] (http://stackoverflow.com/questions/31987772/why-are-new-and-make-not-reserved-keywords) Si chiede 'new' e' make', ma 'true' è anche un [identificatore predeterminato] (https://golang.org/ref/spec#Predeclared_identifiers) che rende applicabili le risposte anche qui. – icza
Né vere né false sono parole chiave (https://golang.org/ref/spec#Keywords) ma identificatori predeclared (https://golang.org/ref/spec#Predeclared_identifiers) e le ridefinite che va bene e funziona come l'intera lingua – Volker