sagen für einige sehr einfache Golang Code:Läuft Golang auf einer virtuellen Maschine?
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)
}
Dies hat die folgende Ausgabe:
0x2000
0x2020
Was ist hier los? Dies sieht nicht wie ein Funktionszeiger oder irgendeine Art von Zeiger für diese Angelegenheit aus, die man im Stapel finden würde. Ich verstehe auch, dass Go, obwohl es einige nette Low-Level-Funktionalität in der Threading-Abteilung bietet, auch ein Betriebssystem benötigt, damit es funktioniert; C ist auf allen Computerplattformen funktionsfähig, und Betriebssysteme können darin geschrieben werden, während Go ein Betriebssystem benötigt, um zu funktionieren, und in der Tat funktioniert es nur auf einigen wenigen Betriebssystemen. Bedeuten die sehr regelmäßigen Funktionszeiger, dass dies auf einer VM funktioniert? Oder ist der Compiler nur mit C-Funktionen auf niedriger Ebene verbunden?
Nachdem in der Bibliothek Code überprüft, ob 'fmt' zu sehen oder "reflect" hat beim Ausdrucken irgendwelche Änderungen an den Funktionszeigerwerten vorgenommen, ich kam zu dem Schluss, dass dies nicht der Fall ist. Go mappt Ihren Code ganz einfach ganz unten im VM-Bereich. :) – hobbs
Er weiß es nicht und fragt, warum ihn ablehnen? – vuhung3990