Assuming I have an int64 variable (or other integer size) representing a valid unicode code-point, and I want to convert it into a rune in Go, what do I do?
In C I would have used a type cast something like:
c = (char) i; // 7 bit ascii only
But in Go, a type assertion won't work:
c, err = rune.( i)
Suggestions?
You just want rune(i)
. Casting is done via type(x)
.
Type assertions are something different. You use a type assertion when you need to go from a less specific type (like interface{}
) to a more specific one. Additionally, a cast is checked at compile time, where type assertions happen at runtime.
Here's how you use a type assertion:
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
In Go, you want to do a conversion.
Conversions are expressions of the form
T(x)
whereT
is a type andx
is an expression that can be converted to typeT
.Conversion = Type "(" Expression ")" .
A non-constant value
x
can be converted to typeT
in any of these cases:
x
is assignable toT
.x
's type andT
have identical underlying types.x
's type andT
are unnamed pointer types and their pointer base types have identical underlying types.x
's type andT
are both integer or floating point types.x
's type andT
are both complex types.x
is an integer or has type[]byte
or[]rune
andT
is a string type.x
is a string andT
is[]byte
or[]rune
.
You want to convert x
, of type int
, int32
, or int64
, to T
of type rune
, an alias for type int32
. x
's type and T
are both integer types.
Therefore, T(x)
is allowed and is written rune(x)
, for your example, c = rune(i)
.