我应该总是使用 rune 而不是 string 除了做 I/O
Should I ALWAYS use rune instead of string except doing I/O
在Python3中,所有字符串都是Unicode,所以你只需要在I/O操作时进行解码或编码,而在你的代码的主要部分,你只需要使用Unicode。
所以,我想知道在 Go 中,我应该做同样的事情吗?我是否应该在输入处将所有字符串转换为 []rune
并且我的所有函数只接收 []rune
类型?
因为我是 Go 的新手,所以我不知道有多少第 3 方库支持 rune 作为字符串。如果我在我的代码中一直使用 rune,当我需要与第 3 方库交互时,将 rune 转换为字符串的开销会成为问题吗?
Should I ALWAYS use rune instead of string except doing I/O
有几个非常有用的包可以处理字符串,如果您的数据在符文数组(或切片)中,您会发现使用它们很尴尬。
There are many cases that I have to get the character at a index,
通常这样做是不安全的,部分原因是 combining characters 但也因为字符串(或一般的 Unicode 文本)可能包含许多其他困难的情况 - 可能是从左到 -右边和从右到左的文本等
Normalizing 几种正常形式之一的文本可能有助于处理大多数组合字符,但有些组合不会简化为单个符文。
I'm writing something like a parser to parse the text with emoji
Unicode emoticons 只是另一个代码点 - 因此可以像大多数普通字符一样对待。
在许多情况下,最好使用 range
运算符遍历字符串。
例如,如果您想用 :-)
替换所有内容,这也许可以使用 strings.Replace()
或使用 for ... range
和 strings.Builder
来处理。
对我来说,最有说服力的论点是,一旦你在 ASCII 之外冒险,文本就会很奇怪,Unicode 几乎是不可思议的怪异,探索它的深度最好留给专家,他们一生都在与它的疯狂作斗争。如果您想将时间花在通常对您、您的企业和客户更重要的业务端功能上,请使用标准包。
有用的参考资料:
- Strings, bytes, runes and characters in Go. Rob Pike. 23 October 2013
- Package unicode. Go authors.
- Dark corners of Unicode. Eevee. Sep 12, 2015
- Unicode is kind of insane. Ben Frederickson. 26 May 2015
- The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!). Joel Spolsky. October 8, 2003
在Python3中,所有字符串都是Unicode,所以你只需要在I/O操作时进行解码或编码,而在你的代码的主要部分,你只需要使用Unicode。
所以,我想知道在 Go 中,我应该做同样的事情吗?我是否应该在输入处将所有字符串转换为 []rune
并且我的所有函数只接收 []rune
类型?
因为我是 Go 的新手,所以我不知道有多少第 3 方库支持 rune 作为字符串。如果我在我的代码中一直使用 rune,当我需要与第 3 方库交互时,将 rune 转换为字符串的开销会成为问题吗?
Should I ALWAYS use rune instead of string except doing I/O
有几个非常有用的包可以处理字符串,如果您的数据在符文数组(或切片)中,您会发现使用它们很尴尬。
There are many cases that I have to get the character at a index,
通常这样做是不安全的,部分原因是 combining characters 但也因为字符串(或一般的 Unicode 文本)可能包含许多其他困难的情况 - 可能是从左到 -右边和从右到左的文本等
Normalizing 几种正常形式之一的文本可能有助于处理大多数组合字符,但有些组合不会简化为单个符文。
I'm writing something like a parser to parse the text with emoji
Unicode emoticons 只是另一个代码点 - 因此可以像大多数普通字符一样对待。
在许多情况下,最好使用 range
运算符遍历字符串。
例如,如果您想用 :-)
替换所有内容,这也许可以使用 strings.Replace()
或使用 for ... range
和 strings.Builder
来处理。
对我来说,最有说服力的论点是,一旦你在 ASCII 之外冒险,文本就会很奇怪,Unicode 几乎是不可思议的怪异,探索它的深度最好留给专家,他们一生都在与它的疯狂作斗争。如果您想将时间花在通常对您、您的企业和客户更重要的业务端功能上,请使用标准包。
有用的参考资料:
- Strings, bytes, runes and characters in Go. Rob Pike. 23 October 2013
- Package unicode. Go authors.
- Dark corners of Unicode. Eevee. Sep 12, 2015
- Unicode is kind of insane. Ben Frederickson. 26 May 2015
- The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!). Joel Spolsky. October 8, 2003