Arrays golang中的可变getter函数

Arrays golang中的可变getter函数,arrays,go,stack,Arrays,Go,Stack,考虑go中的以下堆栈实现: package main import "fmt" var a [10]int var top int = -1 func main() { printStack() push(1) printStack() push(23) printStack() pop() push(2) printStack() println("Top element is", getTop) } func p

考虑go中的以下堆栈实现:

package main

import "fmt"

var a [10]int
var top int = -1

func main() {
    printStack()
    push(1)
    printStack()
    push(23)
    printStack()
    pop()
    push(2)
    printStack()
    println("Top element is", getTop)
}

func push(x int) {
    top += 1
    a[top] = x
}

func pop() {
    top -= 1
}

func getTop() int {
    return a[top]
}

func printStack() {
    fmt.Println(top+1, "Stack: ", a, "Top", getTop)
}
问题:

  • 当我使用
    println(“Top元素是”,getTop())
    时,它打印出内存地址
    0x193928
    ,但当我调用
    println(“Top元素是”,getTop())
    ,它返回
    2
    。返回2是有道理的,但我不明白为什么它返回内存地址?没有括号的getTop调用不应该是无效的吗
  • 似乎在golang中不能有同名的变量和函数。这是正确的假设吗
  • 播放:

  • 您可以将函数作为变量传递,例如:。因此,
    getTop
    是一个“函数指针”,它解释了正在打印的地址

  • 由#1解释:如果在同一范围内声明,则var名称和函数名称会发生冲突