代码之家  ›  专栏  ›  技术社区  ›  Nico

Go指针解引用

  •  1
  • Nico  · 技术社区  · 3 年前

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

    我目前用来编写第一个GO项目的库叫做 Commando . 这就是结构 CommandRegistry 感兴趣的变量叫做命令。

    在结构中,变量描述如下:

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

    第一眼看到它时,我会把它理解为一个包含字符串列表的映射对象,不过它也显示了指向实际命令对象的指针引用。

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

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

    有什么办法能让我找回 Command 对象,或者为什么类型包含 *命令 在它的声明中?

    0 回复  |  直到 3 年前
        1
  •  2
  •   Thijs van der Heijden    3 年前

    Commands 是一个映射(字典),其中字符串作为键,指向命令的指针作为值。通过向它传递一个键,您将得到一个指向它所属命令的指针。然后可以将指针解引用到实际的 Command 通过使用 * 操作人员差不多 dereferencedCommand := *Commands["key"] .

    这个 * 接线员可能会很困惑,至少对我来说是这样。当用作类型时,它表示我们正在接收某个变量的内存地址。但要将内存地址解引用到具体类型,还可以使用 * 操作人员