2017-08-23 3 views
-1

Ich bin neu in Go Sprache und habe einige Beispiele in GO ausprobiert.
In GO int ist kein Schlüsselwort, also habe ich eine Variable mit dem Namen int deklariert.int Datentyp in Go

package main 
import "fmt" 

func main() { 
    var int int = 8 
    fmt.Println(int) 

    var number int = 10 
    fmt.Println(number) 
} 

Nun, wenn ich diesen Code bauen erhalte ich Fehler folgende:

[[email protected] test]$ go build variables.go 
# command-line-arguments 
./variables.go:8: int is not a type 

Ich versuche, den Grund zu verstehen, warum dies zu sehen ist und was hat var int int so tun, dass int-Typ ein nicht verfügbaren Daten wird.

+1

Sie haben die Antwort auf Ihre Frage gegeben: Sie haben "int" etwas anderes gemacht (was möglich ist, da es kein Schlüsselwort ist) und jetzt ist es etwas anderes. – Volker

+0

Ja! Es scheint, als ob sich das Verhalten von int geändert hat. Hier habe ich "int object" überschrieben und in den nächsten Zeilen den int-Typ für eine andere Variable gesetzt, weil ich in "int" jetzt nur Wert 8, nicht "int object" habe. –

+0

@Adrian: Es ist ein vordefinierter numerischer Typ, aber AFAIK, Sie können immer noch etwas tun wie 'int: = struct {}'. Traurig aber wahr. Was das OP akzeptieren sollte ist, dass die meisten Sprachen Ihnen erlauben, schlechte Dinge zu tun, es liegt an Ihnen, dies nicht zu tun. Es ist wie schlechtes C zu schreiben, das auf undefiniertes Verhalten anspricht. Es ist möglich, aber es ist nicht etwas, was Sie tun sollten –

Antwort

0

In Go int ist ein vordefinierter Bezeichner, daher kann er nicht als Variablenname verwendet werden. Benenne also die erste Variable in etwas anderes um. Wie num1 und es wird kompilieren!

package main 
import "fmt" 

func main() { 
    var num1 int = 8 
    fmt.Println(num1) 

    var number int = 10 
    fmt.Println(number) 
} 

Hoffe, das hilft!

+0

Selbst wenn ich meine letzten 2 Zeilen entferne, kompiliert es immer noch. Also, warum ist das nicht passiert? Er akzeptiert int als Variablennamen, ändert jedoch das Verhalten des Datentyps int. –

+0

@bhagyeshdudhediya Hmm, das ist interessant, in Ordnung. Ich nehme an, der Compiler sieht, dass kein anderer Int instanziiert ist, so dass es keinen anderen Weg gibt, den Code zu interpretieren. (Wenn es keine andere int-Variable gibt, besteht die einzige Möglichkeit darin, einen Int namens int zu erstellen.) –

+1

@Deancoakley: ALERT: "In Go kann das Reservierungswort int nicht als Variablenname verwendet werden." Nicht wahr. "int" ist ein [vordekoderisierter Bezeichner] (https://golang.org/ref/spec#Predeclared_identifiers).'int' ist kein reserviertes [Schlüsselwort] (https://golang.org/ref/spec#Keywords). – peterSO

3
package main 

import "fmt" 

func main() { 
    // int is a predeclared type identifier 
    var int int = 8 
    // int is a variable identifier 
    fmt.Println(int) 

    // error: int is not a type 
    var number int = 10 
    fmt.Println(number) 
} 

Sie überschatten die int Kennung.

Siehe The Go Programming Language Specification.

Go ist ein Block strukturierte Programmiersprache:

Blocks

Declarations and scope

int ist ein predeclared identifier und wird implizit im Universum Block deklariert.

Der Gültigkeitsbereich eines in einer Funktion deklarierten Variablenbezeichners beginnt am Ende der Deklaration und endet am Ende des innersten umschließenden Blocks.

Die Aussage

var int int = 8 

verwendet die vordeklarierte int Typ eine variable Kennung int, beschatten die vordeklarierte Kennung zu erklären: Variable shadowing.

Verwandte Themen