假设我有一个int64变量(或其他整数大小)代表一个有效的unicode代码点,我想把它转换为Go中的符文,我该怎么办?
在C中,我会使用类似的类型:
c = (char) i; // 7 bit ascii only
但在Go中,类型断言不起作用:
c, err = rune.( i)
建议?
答案 0 :(得分:15)
你只想要rune(i)
。通过type(x)
完成投射。
类型断言是不同的。当您需要从不太具体的类型(如interface{}
)转到更具体的类型时,可以使用类型断言。此外,在编译时检查强制转换,其中类型断言在运行时发生。
以下是使用类型断言的方法:
var (
x interface{}
y int
z string
)
x = 3
// x is now essentially boxed. Its type is interface{}, but it contains an int.
// This is somewhat analogous to the Object type in other languages
// (though not exactly).
y = x.(int) // succeeds
z = x.(string) // compiles, but fails at runtime
答案 1 :(得分:3)
在Go中,您想要进行转换。
转化是
T(x)
形式的表达式,其中T
是一种类型x
是一个可以转换为T
类型的表达式。Conversion = Type "(" Expression ")" .
非常量值
x
可以在任何这些中转换为T
类型 例:
x
可分配给T
。x
的类型和T
具有相同的基础类型。x
的类型和T
是未命名的指针类型,它们的指针基类型具有相同的基础类型。x
的类型和T
都是整数或浮点类型。x
的类型和T
都是复杂类型。x
是一个整数,或者类型为[]byte
或[]rune
,T
是字符串类型。x
是一个字符串,T
是[]byte
或[]rune
。
您希望将x
类型int
,int32
或int64
转换为类型T
的{{1}},别名对于rune
类型。 int32
的类型和x
都是整数类型。
因此,T
是允许的,并且为T(x)
写成rune(x)
。