-4

这个例子展示了 int 类型可以转换为 string 类型。但我的问题是为什么?

package main

import (
    "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
}

如我错了请纠正我。但这不false也应该吗?

reflect.TypeOf(int(0)).ConvertibleTo(reflect.TypeOf("string"))
4

2 回答 2

2

intto转换的含义string是创建一个具有一个 unicode 字符的字符串:由该 int 的数字标识的字符。

看这个例子:

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 到 string 的转换产生一个符文字符串,而不是数字字符串(你的意思是 fmt.Sprint(x) 吗?)

这是因为这种转换比较奇怪且不常用,所以 go vet 基本上默认将其视为潜在错误。

于 2021-04-26T20:19:57.633 回答
2

为什么“int”可以转换为“string”?

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

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

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

于 2021-04-26T21:08:01.547 回答