下面是我创建的程序,用来理解Go中字符串索引的工作方式:
package main
import "fmt"
func main() {
vendor1 := "Cisco"
fmt.Println(vendor1[0])
fmt.Println(vendor1[1:4])
fmt.Println(vendor1[1:])
fmt.Println(vendor1[:])
}
输出:
C:GolangVARIABLE> go run .variable.go
67
isc
isco
Cisco
令我困惑的是Println(vendor1[0])返回数字'67'而不是'C',为什么会这样?为什么它不同于Println(vendor1[1:4]), Println(vendor1[1:])和Println(vendor1[:]),它们都返回所需的字符?
索引表达式与切片表达式不是一回事,不要将它们混为一谈。
索引,而不是切片,返回byte
,它是uint8
的类型别名,Println
只是打印无符号整数。
切片返回一个字符串,这就是为什么Println
输出一个文本。
要打印索引0处的值,请使用fmt.Printf("%cn", vendor1[0])
而不是fmt.Println(vendor1[0])
,对于其他三个值,您可以使用%s
和fmt.Printf()
,因为它们是字符串。我将你的代码修改如下:
package main
import (
"fmt"
)
func main() {
vendor1 := "Cisco"
fmt.Printf("%cn", vendor1[0])
fmt.Printf("%sn", vendor1[1:4])
fmt.Printf("%sn", vendor1[1:])
fmt.Printf("%sn", vendor1[:])
}
输出:
C
isc
isco
Cisco