为了账号安全,请及时绑定邮箱和手机立即绑定

golang中的可变getter函数

golang中的可变getter函数

Go
喵喵时光机 2021-11-22 15:09:17
考虑 go 中的以下堆栈实现:package mainimport "fmt"var a [10]intvar top int = -1func 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
查看完整描述

1 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

  1. 您可以将您的函数作为 var 传递,例如:https : //play.golang.org/p/wzGVtsEFQk。所以getTop是“函数指针”,这解释了被印刷的地址

  2. #1 解释:如果在同一个作用域中声明,你的 var 名和函数名会冲突


查看完整回答
反对 回复 2021-11-22
  • 1 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信