考虑一下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 element is", getTop)时,它将打印出内存地址0x193928,但是当我调用println("Top element is", getTop())时,它将返回2。返回2很有意义,但是我不明白为什么它返回的内存地址是?不带括号的getTop不应该无效?
  • 似乎golang中不能包含相同名称的变量和函数。这是正确的假设吗?

  • 播放:https://play.golang.org/p/vvOGG296gr

    最佳答案

  • 您可以将函数作为var传递,例如:https://play.golang.org/p/wzGVtsEFQk。因此getTop是一个“函数指针”,它解释了正在打印的地址
  • 由#1解释:如果在同一作用域中声明,则您的var名称和函数名称冲突
  • 关于arrays - Golang中的变量getter函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33592478/

    10-09 15:18