【发布时间】:2015-09-25 16:49:32
【问题描述】:
说一些非常简单的 Golang 代码:
package main
import "fmt"
func plus( a int, b int) int {
return a+b
}
func plusPlus(a,b,c int) int {
return a +b + c
}
func main() {
ptr := plus
ptr2 := plusPlus
fmt.Println(ptr)
fmt.Println(ptr2)
}
这有以下输出:
0x2000
0x2020
这里发生了什么?这看起来不像一个函数指针,或者任何类型的指针,人们会在堆栈中找到它。我也明白 Go 虽然在线程部门提供了一些不错的低级功能,但也需要一个操作系统才能运行。 C 可以在所有计算机平台上运行,并且可以在其中编写操作系统,而 Go 需要一个操作系统才能运行,实际上目前只能在少数操作系统上运行。非常常规的函数指针是否意味着这适用于 VM?还是编译器只是链接到低级 C 函数?
【问题讨论】:
-
在检查库代码以查看
fmt或reflect在打印它们时是否对函数指针值进行了任何修改后,我得出的结论是它们没有。 Go 实际上只是将您的代码映射到 VM 空间的最底部附近。 :) -
他不知道就问,为什么要投票给他?
标签: go