我目前正在尝试学习GO,主要是了解和使用Java,ASP.Net和一些Python,没有使用类似C的指针的经验,这导致了我现在的困惑。
我目前用来编写我的第一个GO项目的一个库叫做Commando。在这里,我有一个结构命令,感兴趣的变量称为CommandRegistry。
在结构中,变量的描述如下:
// registered command configurations
Commands map[string]*Command乍一看,我会把它理解为一个包含字符串列表的Map对象,但是它也显示了对实际Command对象的指针引用。
我所能看到的是,它是一个我可以循环的映射,它返回命令的名称(字符串),但是我想知道类型描述中的*Command是否意味着我可以以某种方式取消对指针的引用,并检索对象本身来提取它的附加信息。
据我所知,&操作数用于创建另一个对象的新指针。基本上是用Pass-by-reference代替了pass-by-value。并且*操作数通常用信号通知对象是指针或用于在新函数中请求指针。
有没有一种方法可以检索Command对象,或者为什么该类型的声明中包含*Command?
发布于 2021-10-21 10:41:03
Commands是一个映射(字典),它以字符串作为键,以指向命令的指针作为值。通过向它传递一个键,您将获得指向它所属的命令的指针。然后,可以使用*操作符取消对实际Command对象的指针的引用。就像dereferencedCommand := *Commands["key"]一样。
*操作符可能会让人很困惑,至少对我来说是这样。当用作一个类型时,它表示我们正在接收某个变量的内存地址。但是,要将内存地址解除对具体类型的引用,还需要使用*操作符。
https://stackoverflow.com/questions/69660352
复制相似问题