gpt4 book ai didi

go - 在 Go 中为变量分配类型

转载 作者:IT王子 更新时间:2023-10-29 01:04:47 27 4
gpt4 key购买 nike

如何拥有一个类型为变量类型的变量?

这是什么意思?我有 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()

go 中是否有这样的机制允许我这样做?我不知道在他们的文档中哪里可以找到这些东西。老实说,我通常不知道这些在编程语言中叫什么。

例如我希望能够做到:

// For example, what would be the type of myType?
var myType type = int

我将使用此机制来获取“类型”参数。例如:

func Infer(value interface{}, type gotype) {...}

最佳答案

Is there such a mechanism in go that allows me to do that?

简短的回答是:不。

长答案是:这听起来像 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 类型相同的变量。

在您的具体示例中:

I will use this mechanism to take "type" arguments. For example:

func Infer(value interface{}, type gotype) {...}

不,没有办法做到这一点。实际上,它与 Go 的变量支持的关系远不如与 Go 已编译这一事实的关系。

变量完全是一个运行时概念。函数签名(就像 Go 中的所有其他类型一样)在编译时是固定的。因此,运行时 变量不可能影响编译阶段。这在任何编译语言中都是如此,而不是 Go 中的特殊功能(或缺乏)。

关于go - 在 Go 中为变量分配类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45295185/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com