2017-01-28 43 views
1

比方說,我已經定義了以下類型:如何獲取類型的字符串表示形式?

type ID uuid.UUID 

我該如何獲得類型爲字符串以編程的方式,因此很容易比可能重構以後其他:

fmt.Sprintf("%T", ID{}) 

我不要不太像,因爲它實例化它,也來自一個接口。

回答

2

您可以使用包裹reflectfmt包裹也是這樣做的)。您可能會開始從指針的類型,並使用類型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):

"" 

請參閱相關的問題:

Golang reflect: Get Type representation from name?

Identify non builtin-types using reflect

相關問題