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

Golang 运行在虚拟机上吗?

Golang 运行在虚拟机上吗?

Go
ibeautiful 2021-10-18 17:12:07
说一些非常简单的 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)}这有以下输出:0x20000x2020这里发生了什么?这看起来不像一个函数指针,或者任何类型的指针,可以在堆栈中找到。我也明白 Go,虽然在线程部门提供了一些不错的低级功能,但它也需要一个操作系统才能运行;C 在所有计算机平台上都可以运行,操作系统可以用它编写,而 Go 需要一个操作系统才能运行,实际上现在只能在少数操作系统上运行。非常常规的函数指针是否意味着这适用于虚拟机?或者编译器只是链接到低级 C 函数?
查看完整描述

3 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

Go 不在虚拟机上运行。

从语言规范来看,ptrptr2都是函数值。它们可以被称为ptr(1, 2)ptr2(1, 2, 3)

深入到实现中,变量ptrptr2指向 func 值的指针。有关func 值的信息,请参阅函数调用设计文档。注意语言的“function”值和实现的“func”值之间的区别。

因为fmt包使用的反射API 是通过 func 值间接获取要打印的指针,所以调用 来打印函数的实际地址。fmt.Println(ptr)plus


查看完整回答
反对 回复 2021-10-18
?
函数式编程

TA贡献1807条经验 获得超9个赞

它们是函数值:


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() {

    funcp := plus

    funcpp := plusPlus

    fmt.Println(funcp)

    fmt.Println(funcpp)

    fmt.Println(funcp(1, 2))

    fmt.Println(funcpp(1, 2, 3))

}

输出:


0x20000

0x20020

3

6


查看完整回答
反对 回复 2021-10-18
  • 3 回答
  • 0 关注
  • 330 浏览
慕课专栏
更多

添加回答

举报

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