2013-06-05 17 views
5

I geteilt eine Zeichenfolge durch Leerzeichen:Was ist der Unterschied zwischen [0] und [: 1] in Go?

splstr = strings.Split(str, " ") 

Dann iterieren ich jedes Wort, und schauen Sie sich das erste Zeichen wie folgt aus:

splstr[i][0] == "#" 

Aber ich habe diese Fehler aus dieser Zeile:

...: kann "#" nicht in type uint8 umwandeln

...: ungültige Operation: splstr [i] [ 0] == "#" (nicht übereinstimmen Typen uint8 und String)

Aber dann habe ich gespleißt es:

splstr[i][:1] == "#" 

Und das funktioniert. Ich verstehe, warum [:1] vom Typ string ist, aber warum ist [0] vom Typ uint8? (Ich verwende Go 1.1.)

+1

'splstr [i] [0] ==‚# '' ist gültig (einfache Anführungszeichen). Sie indexieren die Zeichen der Zeichenfolge, die selbst keine Zeichenfolgen sind –

Antwort

10

Da die Array-Notation auf einer Zeichenkette Zugriff auf die Bytes der Zeichenfolge gibt, wie es in der Sprache spec dokumentiert:

http://golang.org/ref/spec#String_types

Ein Bytes der Zeichenfolge kann sein Zugriff durch Ganzzahlindizes 0 bis len (s) -1.

(Byte ist ein Alias ​​für uint8)

3

[x:x] ([:x] ist eine Form von [0:x]) wird eine Scheibe in eine andere Scheibe geschnitten, während [x] wird das Objekt bei Index x abzurufen. Der Unterschied ist unten dargestellt:

arr := "#####" 
fmt.Println(arr[:1]) // will print out a string 
fmt.Println(arr[0]) // will print out a byte 

Wenn die string in []byte umgewandelt wird:

arr := []byte("#####") 
fmt.Println(arr[:1]) // will print out a slice of bytes 
fmt.Println(arr[0]) // will print out a byte 

du versuchen können, sich bei http://play.golang.org/p/OOZQqXTaYK

Verwandte Themen