0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Golang 空インターフェイスと型アサーション

Last updated at Posted at 2023-07-25

空のインターフェイス

go言語は全ての型と互換性のある空インターフェイス型を宣言できる。

var kara interface{}

kara = 100
fmt.Println(kara)
fmt.println(&kara)

kara = "Empty"
fmt.Println(kara)

kara = [4]string{"K", "A", "R" "A"}
fmt.Println(kara)
実行結果
100
0xc000080ec0
Empty
[K A R A]

型アサーション

どんな型でも受け取れる空インターフェイスですが、逆に引数で受け渡された値は元の型の情報が欠落しています。
そのためGo言語では型アサーションを提供しており、型アサーションによりその受け取った型が何であるかを以下のように動的にチェックすることができます。

構文
t, ok := i.(T)

i が T(型名) を保持していれば、 t は基になる値になり、 ok は真(true)になります。

そうでなければok は偽(false)になります。

func assertion(obj interface{}) {
	v1, ok := obj.(int)
	if ok {
		fmt.Println("int", v1)
	} 

	v2, ok := obj.(string)
	if ok {
		fmt.Println("string", v2)
	}
}

func main() {

	assertion(100)
	assertion("ASSERTION")
}
実行結果
int 100
string ASSERTION
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?