2014-02-06 3 views
0

Я хотел бы получить (отразить) тип от имени типа.
http://play.golang.org/p/c-9IpSafx0Как получить тип

package main 

import (
    "fmt" 
    "reflect" 
) 

type Name string 

func main() { 
    fmt.Println("Hello, playground") 

    var name Name = "Taro" 
    fmt.Println(name) 

    fmt.Println(getType(name)) 
    // fmt.Println(getType(Name)) // want to same as getType(name) 
} 

func getType(v interface{}) reflect.Type { 
    return reflect.TypeOf(v) 
} 

Как переписать функцию GetType.

ответ

2

Невозможно передать тип в качестве аргумента функции в Go, поэтому то, что вы просите, невозможно. Если вы хотите использовать модуль reflect для работы с типами, вам нужно будет указать значение в качестве отправной точки.

+0

Вы можете получить методы по имени. Интересно, есть ли причина не позволять находить типы по имени или если это был надзор. –

0

Как @James Хенстридж сказал, вы не можете передать тип функции в go. Однако, если у вас есть составной тип, вы можете легко создать версию nil и передать это вместо этого. (play)

type Name struct{ name string } 

func main() { 
    var name = Name{"Taro"} 
    fmt.Println(name) 

    fmt.Println(getType(name)) 
    fmt.Println(getType(Name{})) // want to same as getType(name) 
} 

func getType(v interface{}) reflect.Type { 
    return reflect.TypeOf(v) 
} 

То есть, я не могу понять, почему вы хотите это сделать, так как вы знаете, какой тип у вас есть, когда вы передаете его в функцию getType(), так что вы знаете его имя , так почему бы просто не использовать его?

+0

Это ясно в этом примере. Но реальность непонятна. Например, функция имеет некоторые аргументы, которые не ясны. – Ken

Смежные вопросы