5

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

splstr = strings.Split(str, " ")

然后我迭代每个单词,并像这样查看第一个字符:

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

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

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

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

但后来我把它拼接起来:

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

那行得通。我明白为什么[:1]是类型string,但为什么是[0]类型uint8?(我使用的是 Go 1.1。)

4

2 回答 2

10

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

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

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

(字节是 uint8 的别名)

于 2013-06-05T17:28:33.583 回答
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自己尝试一下

于 2013-06-06T08:02:57.730 回答