为什么 "int" 可以转换为 "string"?
Why is "int" convertible to "string"?
这个例子说明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"))
int
到string
转换的意思是创建一个带有一个unicode字符的字符串:由int的数字标识的字符。
看这个例子:
package main
import (
"fmt"
)
func main() {
fmt.Println(string(int(1234)))
}
输出:
Ӓ
这是因为 Unicode 字符 1234(或更标准表示中的 U+04D2)是:
CYRILLIC CAPITAL LETTER
A WITH DIAERESIS
您还会注意到,在 Go 操场上,您会看到 go vet 的红色输出,这是一个用于查找 Go 程序中常见问题的工具。输出警告:
./prog.go:8:14: conversion from int to string yields a string of one rune, not a string of digits (did you mean fmt.Sprint(x)?)
这是因为这种转换比较奇怪,不常用,所以go vet基本上默认认为这是一个潜在的错误。
Why is “int” convertible to “string”?
因为语言规范1 是这样说的:
Converting a signed or unsigned integer value to a string type yields a string containing the UTF-8 representation of the integer.
1: Conversions, section "Conversions to and from a string type"
这个例子说明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"))
int
到string
转换的意思是创建一个带有一个unicode字符的字符串:由int的数字标识的字符。
看这个例子:
package main
import (
"fmt"
)
func main() {
fmt.Println(string(int(1234)))
}
输出:
Ӓ
这是因为 Unicode 字符 1234(或更标准表示中的 U+04D2)是:
CYRILLIC CAPITAL LETTER A WITH DIAERESIS
您还会注意到,在 Go 操场上,您会看到 go vet 的红色输出,这是一个用于查找 Go 程序中常见问题的工具。输出警告:
./prog.go:8:14: conversion from int to string yields a string of one rune, not a string of digits (did you mean fmt.Sprint(x)?)
这是因为这种转换比较奇怪,不常用,所以go vet基本上默认认为这是一个潜在的错误。
Why is “int” convertible to “string”?
因为语言规范1 是这样说的:
Converting a signed or unsigned integer value to a string type yields a string containing the UTF-8 representation of the integer.
1: Conversions, section "Conversions to and from a string type"