golang中的可变getter函数

考虑 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


喵喵时光机
浏览 133回答 1
1回答

慕的地8271018

您可以将您的函数作为 var 传递,例如:https : //play.golang.org/p/wzGVtsEFQk。所以getTop是“函数指针”,这解释了被印刷的地址#1 解释:如果在同一个作用域中声明,你的 var 名和函数名会冲突
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go