Go中的rune是什么?
我一直在谷歌上搜索,但Golang只说了一句话:rune是int32的别名。
但是为什么整型像交换情况一样被广泛使用呢?
下面是一个函数交换案例。什么是<=和-
为什么switch没有任何参数?
&&应该是什么意思,但是什么是r <= 'z'呢
func SwapRune(r rune) rune {
switch {
case 'a' <= r && r <= 'z':
return r - 'a' + 'A'
case 'A' <= r && r <= 'Z':
return r - 'A' + 'a'
default:
return r
}
}其中大部分来自http://play.golang.org/p/H6wjLZj6lW
func SwapCase(str string) string {
return strings.Map(SwapRune, str)
}我知道这是将rune映射到string,这样它就可以返回交换后的字符串。但我不明白rune或byte在这里到底是如何工作的。
发布于 2013-10-12 03:28:47
来自Go lang发行说明:http://golang.org/doc/go1#rune
Rune是一种类型。它占用32位,用于表示Unicode CodePoint。打个比方,用'ASCII‘编码的英文字符集有128个码点。因此能够容纳在一个字节(8位)内。根据这个(错误的)假设,C将字符视为“字节”char,而将“字符串”视为“字符序列”char*。
但是你猜怎么回事。除了“abcde..”之外,还有许多其他人类发明的符号。符号。而且有如此之多,我们需要32位来编码它们。
在golang中,string是bytes的序列。但是,由于多个字节可以表示一个符文代码点,因此字符串值也可以包含符文。因此,它可以转换为[]rune,反之亦然。
unicode包http://golang.org/pkg/unicode/可以让您体验到挑战的丰富性。
发布于 2015-07-09 01:31:05
我没有足够的声誉在fabrizioM的answer上发表评论,所以我不得不在这里发表评论。
Fabrizio的答案在很大程度上是正确的,他当然抓住了问题的本质-尽管必须做出区分。
字符串不一定是符文序列。它是一个‘字节切片’的包装器,一个切片是一个Go数组的包装器。这有什么不同呢?
符文类型必须是32位的值,这意味着符文类型的值序列必须具有一定数量的位x*32。相反,作为字节序列的字符串具有x*8位的长度。如果所有字符串实际上都是Unicode,则这种差异不会有任何影响。然而,由于字符串是字节的切片,所以Go可以使用ASCII或任何其他任意字节编码。
但是,字符串文字需要写入以UTF-8编码的源代码中。
信息来源:http://blog.golang.org/strings
发布于 2017-11-03 03:00:31
其他人都已经谈到了与符文相关的部分,所以我不打算谈论这一点。
然而,还有一个关于switch没有任何参数的问题。这很简单,因为在Golang中,不带表达式的switch是表示if/else逻辑的另一种方式。例如,编写以下代码:
t := time.Now()
switch {
case t.Hour() < 12:
fmt.Println("It's before noon")
default:
fmt.Println("It's after noon")
}与编写以下代码相同:
t := time.Now()
if t.Hour() < 12 {
fmt.Println("It's before noon")
} else {
fmt.Println("It's after noon")
}你可以阅读更多的here。
https://stackoverflow.com/questions/19310700
复制相似问题