比方說,我已經定義了以下類型:如何獲取類型的字符串表示形式?
type ID uuid.UUID
我該如何獲得類型爲字符串以編程的方式,因此很容易比可能重構以後其他:
fmt.Sprintf("%T", ID{})
我不要不太像,因爲它實例化它,也來自一個接口。
比方說,我已經定義了以下類型:如何獲取類型的字符串表示形式?
type ID uuid.UUID
我該如何獲得類型爲字符串以編程的方式,因此很容易比可能重構以後其他:
fmt.Sprintf("%T", ID{})
我不要不太像,因爲它實例化它,也來自一個接口。
您可以使用包裹reflect
(fmt
包裹也是這樣做的)。您可能會開始從指針的類型,並使用類型nil
指針值,而不分配,你可以從它的reflect.Type
描述導航至基地類型的描述符(或元素型)使用Type.Elem()
的指針。
實施例:
t := reflect.TypeOf((*ID)(nil)).Elem()
name := t.Name()
fmt.Println(name)
輸出(嘗試在Go Playground):
ID
注意:要知道,Type.Name()
可能會返回一個空string
(如果Type
表示未命名的類型)。如果您使用type declaration(與type
關鍵字),那麼您已經命名了該類型,因此Type.Name()
將返回非空類型名稱。但是,使用上面的代碼,例如*[]string
類型的變量會給你一個空字符串:
var s *[]string
t := reflect.TypeOf(s).Elem()
name := t.Name()
fmt.Printf("%q", name)
輸出(嘗試在Go Playground):
""
請參閱相關的問題: