当前位置: 首页 > 面试题库 >

Golang中“ *”和“&”的含义是什么?

柴高岑
2023-03-14
问题内容

我是Golang的新手,正在做http://tour.golang.org/。谁能向我解释
第1、3、5和7行, 特别是’*’和’&’的作用吗?我的意思是通过在函数声明中提及它们,它们应该/应该做什么?一个玩具的例子:

1: func intial1(var1 int, var2 int, func1.newfunc[]) *callproperfunction {
2:
3: addition:= make ([] add1, var1)
4: for i:=1;i<var2;i++ {
5:   var2 [i] = *addtother (randomstring(lengthofcurrent))
6:   }
7: return &callproperfunction {var1 int, var2 int, func1.newfunc[], jackpot}
8: }

看起来它们就像我们在C ++中一样。但是我无法将这些概念与此处的内容联系起来。换句话说,当我在Go的函数声明中使用“ *”和“&”时,它们会做什么。

编辑:
我知道引用和取消引用的意思。我无法理解的是:如何使用指向函数的指针是Golang。例如第1行和第7行,这两行做什么?我们声明了一个名为intial1的函数,该函数返回一个指针?在第7行中,我们使用return函数使用参数对其进行调用。


问题答案:

您的问题与给出的示例不太吻合,但我会尽量简单明了。

假设我们有一个名为的变量a,它保存整数5,而另一个名为的变量p是指针。这是*&进入游戏的地方。

与它们一起打印变量可以产生不同的输出,因此这完全取决于情况和使用情况。使用*&可以节省您的代码行( 在小型项目中并不重要
),并使您的代码更美观/可读性更高。

&返回以下变量的 内存地址

*返回以下变量的 (该变量 保存变量的内存地址,除非您要获取奇怪的输出,否则可能会因为访问计算机的RAM而出现问题)

var a = 5
var p = &a // p holds variable a's memory address
fmt.Printf("Address of var a: %p\n", p)
fmt.Printf("Value of var a: %v\n", *p)

// Let's change a value (using the initial variable or the pointer)
*p = 3 // using pointer
a = 3 // using initial var

fmt.Printf("Address of var a: %p\n", p)
fmt.Printf("Value of var a: %v\n", *p)

总而言之,在使用和&时,请记住是用于设置您要指向的变量的值,而&是您要/想要指向的变量的地址。

希望这个答案有帮助。



 类似资料:
  • 问题内容: 我正在研究将数据存储在mongodb中的示例Go应用程序。这行代码(https://github.com/zeebo/gostbook/blob/master/context.go#L36)似乎访问了存储在大猩猩会话中的用户ID: 有人可以在这里给我解释一下语法吗?我知道这可以从会话中获取价值,但是接下来的部分是什么呢?为什么括号中的点后面是表达式?这是函数调用吗? 问题答案: 是,括

  • 问题内容: Java中“ this”的含义是什么? 问题答案: this 指当前对象 每个非静态方法都在对象的上下文中运行。因此,如果你有这样的课程: 然后调用上会打印 因此,有效地将它用于多种用途: 澄清你在谈论一个字段,当还有其他与该字段同名的东西时 整体引用当前对象 在构造函数中调用当前类的其他构造函数

  • 问题内容: 这个静态函数是来自名称空间的类中的吗? 我该如何解释这个名字?在JRE中的哪个位置定义了此功能?在/ ? 问题答案: 否。实际上是类中的静态成员(不是.NET中的静态成员),它是。的实例。并且是该类的常规(重载)方法。 请参阅http://download.oracle.com/javase/6/docs/api/java/lang/System.html#out。 其实,如果/ /

  • 问题内容: 这段代码在: 最后一行使我感到非常困惑。我不知道的意思。 这些是其他代码: 结果是 我猜想的功能是从中选择所有元素,但是我还没有找到正式的解释。它是什么? 问题答案: builtin.go中的代码用作文档。该代码未编译。 在指出这个函数的最后一个参数是可变参数。可变参数在Go语言规范中进行了说明。 该类型的部分为任何围棋类型替身。

  • 问题内容: 的意义是什么 我正在尝试那样使用它 问题答案: 它被称为传播属性,其目的是使道具的传递更加容易。 让我们假设您有一个接受N个属性的组件。如果数量增加,将这些信息传递下去可能是乏味且笨拙的。 因此,您可以这样做,将它们包装在一个对象中并使用扩展符号 它将把它解压缩到组件上的props中,即,仅当将props传递给另一个组件时,才“永远” 在函数内部使用。照常使用打开包装的道具。

  • 我正在使用一个特定的GraphQLendpoint,尽管我提供了一个干净的JSON结构作为查询,但当我获得结果时,我会得到“Edges”和“Node”标记。它似乎在污染我的数据,没有明显的好处。为什么会有它,是否有可能为了更快、更简单地解析数据而去掉它们?