型の変換

キャスト

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 … 技術評論社