2013-06-05 8 views
5

私は、スペースで文字列を分割:Goの[0]と[:1]の違いは何ですか?

splstr = strings.Split(str, " ") 

は、それから私は、各単語を反復し、このような最初の文字を見て:

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

しかし、私はその行からこれらのエラーを得た:

...: "#"をタイプuint8に変換できません

...無効な操作:splstr [i] [ 0] == "#"(不一致の種類UINT8と文字列)

しかし、私はそれをスプライスさ:

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

そしてそれは動作します。 [:1]のタイプがstringであるのはなぜですか[0]タイプはuint8ですか? (私は行く1.1を使用しています。)

+1

'splstr [I] [0] ==「#で、この自分を試すことができます''は有効です(一重引用符で囲みます)。文字列ではない文字列の文字をインデックスしています –

答えて

10

を言語仕様に記載されているように、文字列の配列表記は、文字列のバイトへのアクセスを与えるので:

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

を文字列のバイトをすることができ整数インデックス0〜len(s)-1によってアクセスされます。

(バイトUINT8の別名である)

3

[x:x][:x][0:x]の形態である)[x]インデックスxでオブジェクトを取得する一方、別のスライスにスライスをカットします。違いを以下に示します。

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

string[]byteに変換されている場合:

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

あなたはhttp://play.golang.org/p/OOZQqXTaYK

関連する問題