gpt4 book ai didi

go - 在 Golang 的 Scanln 中使用 rune 而不是字符串

转载 作者:IT王子 更新时间:2023-10-29 01:41:54 25 4
gpt4 key购买 nike

下面是从控制台读取输入的代码

var message string
fmt.Scanln(&message)

但我想尝试同样的 rune ,它是字节的 unicode

var input []rune
fmt.Scanln(input)

根据我的 C/C++ 知识,数组的引用可以通过它的名称传递,我认为它适用于 rune

但令人惊讶的是,程序甚至在没有接受控制台输入的情况下就通过了 Scanln

我做错了什么?或者它不能完成?或者它需要类型转换为 string ?

最佳答案

您拥有的是一个 slice 而不是一个数组,它们在 Go 中是不同的

当您从字符串中读取每个字符时,您将得到一个 rune ,例如:

for _, rune := range input { ... }
// or
input[0] // it returns a rune

现在,如果您想使用索引或更多 unicode 操作,您应该记住每个 rune 都有一个长度,并且该长度也会影响字符串的长度,请参阅此示例以更好地理解,例如您在中看到 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
}

在这里运行:https://play.golang.org/p/xvmH1laevS

关于go - 在 Golang 的 Scanln 中使用 rune 而不是字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40074698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com