rune
表示 unicode 代码点是int32
. 如此有效地string([]int32{})
与string([]rune{})
将一片符文(类似于 a 的字符string
)转换为string
. 这很有用。
int
is not int32
nor ,因此转换为应该是rune
什么是不合逻辑的,它是模棱两可的,因此语言规范不允许这样做。[]int
string
将整数转换为string
具有单个rune
. 规格:转换:
与字符串类型的转换
- 将有符号或无符号整数值转换为字符串类型会生成一个包含整数的 UTF-8 表示形式的字符串。超出有效 Unicode 代码点范围的值将转换为
"\uFFFD"
.
这让许多人感到困惑,因为许多人期望转换结果是(十进制)表示为字符串。Go 作者已经认识到这一点,并已采取措施在未来将其从语言中删除和删除。在 Go 1.15 中,go vet
已经对此类转换发出警告。Go 1.15 发行说明:Vet:
字符串(x)的新警告
vet 工具现在会针对除or以外的整数类型的表单string(x)
的转换发出警告。Go 的经验表明,这种形式的许多转换错误地假设计算结果为整数 x 的字符串表示。它实际上计算为一个包含 UTF-8 编码的字符串。例如,不对字符串求值;它计算为字符串, 或.x
rune
byte
string(x)
x
string(9786)
"9786"
"\xe2\x98\xba"
"☺"
正确使用的代码string(x)
可以重写为string(rune(x))
. 或者,在某些情况下,utf8.EncodeRune(buf, x)
使用合适的字节切片调用buf
可能是正确的解决方案。其他代码最有可能使用strconv.Itoa
or fmt.Sprint
。
使用go test
.
我们正在考虑在 Go 的未来版本中禁止转换。也就是说,当类型为或时,语言将更改为仅允许string(x)
整数。这种语言更改不会向后兼容。我们将此兽医检查用作更改语言的第一步。x
x
rune
byte