为了账号安全,请及时绑定邮箱和手机立即绑定

为什么“int”可以转换为“字符串”?

为什么“int”可以转换为“字符串”?

Go
幕布斯6054654 2022-08-24 20:09:11
此示例显示 int 类型可转换为字符串类型。但我的问题是为什么?package mainimport (    "fmt"    "reflect")func main() {    it := reflect.TypeOf(42)    st := reflect.TypeOf("hello")    fmt.Printf("%q is convertible to %q: %v\n",        it, st, it.ConvertibleTo(st))        // OUTPUT: "int" is convertible to "string": true    fmt.Printf("%q is convertible to %q: %v\n",        st, it, st.ConvertibleTo(it))        // OUTPUT: "string" is convertible to "int": false}如果我错了,请纠正我。但这难道不应该是吗?falsereflect.TypeOf(int(0)).ConvertibleTo(reflect.TypeOf("string"))
查看完整描述

2 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

为什么“int”可以转换为“字符串”?

因为语言规范1 是这样说的:

将有符号或无符号整数值转换为字符串类型将生成一个包含整数的 UTF-8 表示形式的字符串。

1:转换,“与字符串类型之间的转换”部分


查看完整回答
反对 回复 2022-08-24
?
MM们

TA贡献1886条经验 获得超2个赞

to 转换的含义是创建一个包含一个 unicode 字符的字符串:由该 int 的编号标识的字符。intstring


请参阅此示例:


package main


import (

    "fmt"

)


func main() {

    fmt.Println(string(int(1234)))

}

在操场上


输出:


Ӓ

这是因为 Unicode 字符 1234(或更标准的表示形式中的 U+04D2)是:


西里尔字母大写字母 A,带透视


您还会注意到,在 Go 操场上,您会看到 go vet 的红色输出,这是一个在 Go 程序中查找常见问题的工具。输出警告:


./prog.go:8:14:从 int 到字符串的转换会产生一个符文字符串,而不是一串数字(你的意思是 fmt.Sprint(x)?)


这是因为这种转换相当奇怪并且不常用,因此go vet基本上将其视为默认的潜在错误。


查看完整回答
反对 回复 2022-08-24
  • 2 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号