天パのtech備忘録

プログラミング関係の記事を書いていきます!

Go interface 変数編

interfaceとは

interfaceとはなんでも入れられる変数の型です。他にも用途はありますが今回はなんでも入れられる変数として使用する時にどんな感じに使うかまとめて行きます!

定義、代入

package main

import "fmt"

func main() {
    var i interface{} // interface型を定義
    i = 1             // int
    fmt.Println("int: ", i)
    i = 1.1 // float64
    fmt.Println("float64: ", i)
    i = "文字" // string
    fmt.Println("string: ", i)
    i = 0x01 // byte
    fmt.Println("byte: ", i)
}

結果

int:  1
float64:  1.1
string:  文字
byte:  1

型変換

interfaceは全ての型と互換性があるため、全ての型に変換することができます。それをアサーションといいます。やってみましょう!

package main

import "fmt"

func main() {
    var i interface{} = "english"

    str, ok := i.(string)
    fmt.Println("str: ", str, ok)

    float, ok := i.(float64)
    fmt.Println("float: ", float, ok)

    intger, ok := i.(int)
    fmt.Println("int: ", intger, ok)
}

結果

str:  english true
float:  0 false
int:  0 false

型判定

interfaceの型判定はswitch文を使用します。

package main

import "fmt"

func main() {
    var i interface{} = "english"

    switch v := i.(type) {
    case string:
        fmt.Println("string: ", v)
    case int:
        fmt.Println("int: ", v)
    case float64:
        fmt.Println("float64: ", v)
    default:
        fmt.Println("default: ", v)
    }
}

結果

string:  english

今日はここまでとします!