Go中[0]和[:1]有什么区别?

时间:2013-06-05 17:03:47

标签: go substring slice

我用空格分割字符串:

splstr = strings.Split(str, " ")

然后我迭代每个单词,然后看看第一个字符:

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

但是我从这一行得到了这些错误:

  

...:无法将“#”转换为输入uint8

     

...:无效操作:splstr [i] [0] ==“#”(不匹配类型uint8和字符串)

然后我拼接了它:

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

这很有效。我明白为什么[:1]的类型为string,但为什么[0]类型为uint8? (我正在使用Go 1.1。)

2 个答案:

答案 0 :(得分:10)

因为字符串上的数组表示法可以访问字符串的字节,如语言规范中所述:

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

  

字符串的字节可以通过整数索引0到len(s)-1来访问。

(byte是uint8的别名)

答案 1 :(得分: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

处自行尝试