いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-370 (Go 1.22 にて reflect.TypeFor が追加)

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。忘れないうちにとりあえずメモメモ。。。

Go 1.22 にて、reflect.TypeFor[T]() が追加されますね。

reflect.TypeOf((*MyInterface)(nil)).Elem()

のシュガーメソッドになるのですが、これは結構嬉しい。

インターフェースのTypeを取得したい場合によくやりますねこれ。

試してみる

gotip を使っています。

$ gotip version
go version devel go1.22-7abeefd Sat Jan 13 11:09:50 2024 +0000 linux/amd64
package main

import (
    "errors"
    "fmt"
    "reflect"
)

func main() {
    // よくあるパターン
    t1 := reflect.TypeOf(1)
    t2 := reflect.TypeFor[int]()

    fmt.Println(t1, t2) // int int

    // 間違えやすいパターン
    e := errors.New("this is test")

    t3 := reflect.TypeOf(e)
    t4 := reflect.TypeOf(&e)
    t5 := reflect.TypeOf((*error)(nil)).Elem()
    t6 := reflect.TypeFor[error]()

    fmt.Println(t3, t4, t5, t6) // *errors.errorString *error error error
}

実行すると以下のようになります。

$ gotip run .
int int
*errors.errorString *error error error

参考情報

https://pkg.go.dev/reflect@master#TypeFor

What’s New in Go 1.22: reflect.TypeFor · The Ethically-Trained Programmer

Goのおすすめ書籍

上の書籍の日本語版が下です。


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。