Go

【Go】switch型アサーション

型アサーションはswitchを使用して、複数のどの型に一致するかを判定できます。

型アサーションは以下を参考にして下さい。

switch型アサーション

nilかどうかの判定もできるようです。

package main

import (
	"fmt"
)

// インターフェースの定義
type myInterface interface {
	getName() string
}

// 犬の構造体の定義
type dog struct {
	name string
}

// 犬のメソット定義
func (d dog) getName() string {
	return d.name
}

// 猫の構造体の定義
type cat struct {
	name string
}

// 猫のメソット定義
func (c cat) getName() string {
	return c.name
}

func (c cat) cry() string {
	return "にゃー"
}

func main() {
	d := dog{}
	d.name = "dog_name"
	determineType(d) // dog_name が表示される

	c := cat{}
	c.name = "cat_name"
	determineType(c) // にゃー が表示される

	var m myInterface
	determineType(m) // nil が表示される
}

func determineType(m myInterface) {

	// switch型アサーション。
	switch v := m.(type) {
	case nil:
		fmt.Printf("nil\n")
	case dog:
		fmt.Printf(v.getName() + "\n")
	case cat:
		fmt.Printf(v.cry() + "\n")
	default:
		fmt.Printf("デフォルト\n")
	}

}

コメントを残す

メールアドレスが公開されることはありません。

© DeNnie.Lab All Rights Reserved.