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

Mat*_*att 5 substring go slice

我用空格分割一个字符串:

splstr = strings.Split(str, " ")
Run Code Online (Sandbox Code Playgroud)

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

splstr[i][0] == "#"
Run Code Online (Sandbox Code Playgroud)

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

...:无法将"#"转换为uint8类型

...:无效操作:splstr [i] [0] =="#"(不匹配的类型uint8和string)

但后来我拼接了它:

splstr[i][:1] == "#"
Run Code Online (Sandbox Code Playgroud)

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

mna*_*mna 10

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

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

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

(byte是uint8的别名)