キャスト
var i uint8 = 3 var j uint32 = uint32(i) // uint8 -> uint32 fmt.Println(j) // 3 var s string = "abc" var b []byte = []byte(s) // string -> []byte fmt.Println(b) // [97 98 99] // cannot convert "a" (type string) to type int a := int("a")
キャストに失敗した場合はパニックが起こる
Type assertion
あるインタフェース値が指定した型であるかを調べるには,Type Assertion(型の検査)を使用する。
package main import "fmt" func Print(value interface{}) { // interface{}型はどんな型の引数をとることもできる s, ok := value.(string) // Type Assertion if ok { // okにはType assertionが成功したかどうかの真偽値が入る fmt.Printf("value is string: %s\n", s) // sには変換が成功した場合にその型に変換された値が返る } else { fmt.Printf("value is not string\n") } } func main() { Print("abc") // value is string: abc Print(10) // value is not string }
参考
第3章 型システム―型を用いた安全なプログラミング:はじめてのGo―シンプルな言語仕様,型システム,並行処理|gihyo.jp … 技術評論社