我用空格分割字符串:
splstr = strings.Split(str, " ")
然后我迭代每个单词,然后看看第一个字符:
splstr[i][0] == "#"
但是我从这一行得到了这些错误:
...:无法将“#”转换为输入uint8
...:无效操作:splstr [i] [0] ==“#”(不匹配类型uint8和字符串)
然后我拼接了它:
splstr[i][:1] == "#"
这很有效。我明白为什么[:1]
的类型为string
,但为什么[0]
类型为uint8
? (我正在使用Go 1.1。)
答案 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
处自行尝试