以下是从控制台读取输入的代码
var message string
fmt.Scanln(&message)
但是我想尝试使用rune,它是字节的unicode
var input []rune
fmt.Scanln(input)
根据我的C / C ++知识,数组的引用可以通过它的名称传递,我认为它适用于符文
但令人惊讶的是,该程序在符号的情况下通过了Scanln,甚至没有使用控制台输入
那是做错了什么的?或者它无法完成?或者它需要类型转换为字符串?
答案 0 :(得分:2)
你所拥有的是一个切片而不是一个数组,它们在Go
中有所不同当您从字符串中读取每个字符时,您将获得一个符文,例如:
for _, rune := range input { ... }
// or
input[0] // it returns a rune
现在,如果你想使用索引或更多unicode操作,你应该记住,每个符文都有一个长度,长度也影响字符串的长度,请参阅此示例以更好地理解,例如,您看到3个字符字符串,但长度为5:
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
input := "a界c"
fmt.Println(len(input))
for index, rune := range input {
fmt.Println(index, utf8.RuneLen(rune), string(rune))
}
fmt.Println(input[1:4]) // we know that the unicode character '界'
// starts in index 1 and ends in index 3
}