Type Conversion and Type Assertion in Go
Type conversion
The expression T(v)
converts the value v
to the type T
.
In Go, assignment between items of different type requires an explicit conversion.
Here’s an example.
Type assertion
Type assertion provides access to an interface value’s underlying concrete value.
t := i.(T)
This statement asserts that the interface value i
holds the concrete type T
and assigns the underlying T
value to the variable t
.
If i
does not hold a T
, the statement will trigger a panic.
To test whether an interface value holds a specific type, a type assertion can return two values: the underlying value and a boolean value that reports whether the assertion succeeded.
t, ok := i.(T)
If i
holds a T
, then t
will be the underlying value and ok
will be true
.
If not, ok
will be false
and t
will be the zero value of type T
, and no panic occurs.
Here’s an example.
|
|
Note the similarity between this syntax and that of reading from a map.
val, ok := zoo["cat"]
In this statement, val
is assigned the value stored under the key “cat”. If that key doesn’t exist, val
is the value type’s zero value. ok
is a boolean that is true
if the key exists in the map, and false
if not.