如何获得一个类型为变量类型的变量?
我的意思是什么?我有一个python和java背景。在这两种语言中,我都可以做一些事情,比如为变量分配一个类名。
#Python
class A:
def __init__(self):
self.a = "Some Value"
# And asigning the class name to a variable
class_A = A
# And create instance from class A by using class_A
a = class_A()
是否有这样的机制允许我这样做?在他们的文档中我无法知道在哪里查看这些内容。老实说,通常我不知道这些在编程语言中叫什么。
例如,我希望能够做到:
// For example, what would be the type of myType?
var myType type = int
我将使用此机制来获取“类型”参数。例如:
func Infer(value interface{}, type gotype) {...}
答案 0 :(得分:2)
是否有这样的机制允许我这样做?
没有。
答案 1 :(得分:1)
是否有这样的机制允许我这样做?
简短回答是:否。
答案很长:这听起来像XY Problem,所以根据你实际想要完成的事情,可能有办法。跳到最后,看看我在哪里解决您的特定用例。
我怀疑如果你想在变量中存储一个数据类型,那是因为你想要比较一些其他变量的类型,或者你想要创建一个这个其他未知类型的变量。这两种情况可以在Go。
中完成在第一种情况下,只需使用类型开关:
switch someVar.(type) {
case string:
// Do stringy things
case int:
// Do inty things
}
从语义上讲,这看起来很像将someVar
的类型分配给隐式切换比较变量,然后与各种类型进行比较。
在我提到的第二种情况中,如果你想创建一个未知类型的变量,可以使用反射以圆周方式完成:
type := reflect.TypeOf(someVar)
newVar := reflect.New(type).Interface()
此处newVar
现在是interface{}
,它包含与someVar
相同类型的变量。
在您的具体示例中:
我将使用此机制来获取“类型”参数。例如:
func Infer(value interface{}, type gotype) {...}
不,没有办法做到这一点。与Go的变量支持相比,它实际上与Go编译的事实相关性要小得多。
变量完全是运行时概念。函数签名(与Go中的所有其他类型一样)在编译时是固定的。因此,运行时变量不可能影响编译阶段。在任何编译语言中都是如此,而不是Go中的特殊功能(或缺少它)。
答案 2 :(得分:0)
在go中没有这样的东西,但类型别名可以做你需要的:
department
即使你的类型是一个int,你必须将它转换为别名的类型:
type MyInt int
func (num MyFloat) TestInt() int {
return int(num)
}
答案 3 :(得分:0)