見出し画像

golang 型アサーションの使い方と注意点について

今回はgolangの型アサーションについて紹介していきます。


型アサーションとは

型アサーションは、インターフェース型の変数が特定の型を持つことを確認し、その型の値を取り出すために使います。

主にインターフェース型から具体的な型への変換やチェックを行うために使うことが多いです。


型アサーションの書き方

型アサーションは以下のように書きます。

v, ok := x.(T)

変数xはインターフェース型の変数、tは具体的なデータ型、vはアサーションされた型の値、okはアサーションの成功可否を表すブーリアン型の値です。

package main

import "fmt"

func assertType(i interface{}) {
    if s, ok := i.(string); ok {
        fmt.Println("string型です:", s)
    } else if n, ok := i.(int); ok {
        fmt.Println("int型です:", n)
    } else {
        fmt.Println("不明です")
    }
}

func main() {
    var v1 interface{} = "Sanmple"
    var v2 interface{} = 100
    var v3 interface{} = 200

    assertType(v1)
    assertType(v2)
    assertType(v3)
}

上記コードではassertType()関数がインターフェース型の変数iに対して型アサーションを行っています。
iがstring型やint型の場合、対応するメッセージが出力されます。
もしiがこれらの型のいずれでもない場合、"不明です"というメッセージが出力されます。

このコードの出力結果は以下のようになります。

string型です: Sanmple
int型です: 100
int型です: 200


型アサーションの注意点

型アサーションを使用するうえではいくつかの注意点があります。

panicのリスク

単一戻り値の型アサーションは、アサーションに失敗するとpanicが発生します。
アサーションが失敗する可能性がある場合は、常に二要素の代入するように書く必要があります。


型アサーションの適切な使用

型アサーションはインターフェース型以外の値に対して型アサーションを行うことができません。


デフォルトゼロ値の理解

型アサーションの結果がfalseの場合、返される値はその型のゼロ値になります。int型の場合は0が変えってきます。


interface{}の使用に注意

interface{}は任意の型の値を受け入れることができますが、これに頼りすぎると型の利点を失い、エラーの原因となる可能性があります。


golangをもっと詳しくなりたい方に

初めてのGo言語

Go言語の入門から応用まではこの一冊で網羅されています。説明も順序立てて説明されており完成度の高い参考書となっています。


詳解Go言語Webアプリケーション開発

こちらはGo言語の基礎知識を得たあとに読むことをすすめる本となっています。ハンズオン形式で手を動かしながら実装をしていくことができるため、実際の開発を意識しながらGo言語を学ぶことができます。

以下の記事では他にも筆者が実際に読んでおすすめしたい本をまとめています。


【Go入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)

まだGo言語の勉強を始めていない方、全くの初心者の方にはこちらのUdemy教材が最もおすすめです。

この教材ではgolangの基礎について網羅的に学ぶことができます。ただ見て学ぶだけでなく、講座の中でアプリ作成まで行うことで学んだことの理解をさらに深めることができます。


現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発

個人的に最も勉強になったのは「現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発」という教材です。
本格的なレクチャーに入る前に、なぜGoなのか、なぜFintechなのかについて説明されていることで、Goの概念や意味について大枠から理解することができます。

以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。

※本ページではアフィリエイトリンク(PR)が含まれています


この記事が参加している募集

この経験に学べ

この記事が気に入ったらサポートをしてみませんか?