在Go中转换/转换为符文

时间:2013-04-13 01:42:21

标签: casting go type-conversion rune

假设我有一个int64变量(或其他整数大小)代表一个有效的unicode代码点,我想把它转换为Go中的符文,我该怎么办?

在C中,我会使用类似的类型:

c = (char) i;  // 7 bit ascii only

但在Go中,类型断言不起作用:

c, err = rune.( i)

建议?

2 个答案:

答案 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中,您想要进行转换。

  

Conversions

     

转化是T(x)形式的表达式,其中T是一种类型   x是一个可以转换为T类型的表达式。

Conversion = Type "(" Expression ")" .
     

非常量值x可以在任何这些中转换为T类型   例:

     
      
  • x可分配给T
  •   
  • x的类型和T具有相同的基础类型。
  •   
  • x的类型和T是未命名的指针类型,它们的指针基类型具有相同的基础类型。
  •   
  • x的类型和T都是整数或浮点类型。
  •   
  • x的类型和T都是复杂类型。
  •   
  • x是一个整数,或者类型为[]byte[]runeT是字符串类型。
  •   
  • x是一个字符串,T[]byte[]rune
  •   

您希望将x类型intint32int64转换为类型T的{​​{1}},别名对于rune类型。 int32的类型和x都是整数类型。

因此,T是允许的,并且为T(x)写成rune(x)