Go指针解引用

Go pointer dereferencing

我目前正在尝试学习 GO,主要了解和使用 Java、ASP.Net 和一些 Python,没有使用类 C 指针的经验,这导致我目前的困惑。

我目前用来编写我的第一个 GO 项目的库叫做 Commando。 我有结构 CommandRegistry 并且感兴趣的变量称为 Commands.

结构体中变量描述如下:

// registered command configurations
Commands map[string]*Command

乍一看,我会将其理解为包含字符串列表的 Map 对象,但它还显示了指向实际 Command 对象的指针引用。

我所能看到的是它是一个我可以循环的地图 returns 命令的名称(字符串), 但是我想知道类型描述中的 *Command 是否意味着我可以以某种方式取消引用指针并检索对象本身以提取它的附加信息。

据我所知,& 操作数用于创建另一个对象的新指针。 Pass-by-reference 基本上代替了 pass-by-value。 并且 * 操作数通常表示对象是指针或用于在新函数中需要指针。

有什么方法可以检索 Command 对象,或者为什么该类型在其声明中包含 *Command

Commands 是一个映射(字典),它以字符串作为键,以指向命令的指针作为值。通过给它传递一个键,你将得到一个指向它所属命令的指针。然后,您可以使用 * 运算符取消引用指向实际 Command 对象的指针。类似于 dereferencedCommand := *Commands["key"].

* 运算符可能会让人非常困惑,至少对我来说是这样。当用作类型时,它表示我们正在接收某个变量的内存地址。但是要将内存地址取消引用到具体类型,您还可以使用 * 运算符。