考慮 go 中的以下堆棧實現(xiàn):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),它打印出內(nèi)存地址0x193928,但當我調(diào)用時println("Top element is", getTop()),它返回2。返回 2 是有道理的,但我不明白為什么它返回內(nèi)存地址?不應(yīng)該調(diào)用沒有括號的 getTop 是無效的嗎?似乎在 golang 中不能有同名的變量和函數(shù)。這是正確的假設(shè)嗎?播放:https : //play.golang.org/p/vvOGG296gr
1 回答

慕的地8271018
TA貢獻1796條經(jīng)驗 獲得超4個贊
您可以將您的函數(shù)作為 var 傳遞,例如:https : //play.golang.org/p/wzGVtsEFQk。所以
getTop
是“函數(shù)指針”,這解釋了被印刷的地址#1 解釋:如果在同一個作用域中聲明,你的 var 名和函數(shù)名會沖突
- 1 回答
- 0 關(guān)注
- 148 瀏覽
添加回答
舉報
0/150
提交
取消