【发布时间】:2019-05-28 11:50:31
【问题描述】:
我写了一个HelloWorld.py 并使用grumpy 将HelloWorld.py 编译为Go 源代码。但是运行go build后,没有生成二进制文件,go build命令执行成功,没有任何错误,但是文件夹中没有找到二进制文件。
这是 HelloWorld.py 中的代码:
def hello():
print("hello, world")
这是hello.go中生成的代码:
package __main__
import πg "grumpy/build/src/grumpy"
var Code *πg.Code
func init() {
Code = πg.NewCode("<module>", "hello.py", nil, 0, func(πF *πg.Frame, _ []*πg.Object) (*πg.Object, *πg.BaseException) {
var πR *πg.Object; _ = πR
var πE *πg.BaseException; _ = πE
ßhello := πg.InternStr("hello")
var πTemp001 *πg.Object
_ = πTemp001
var πTemp002 []πg.Param
_ = πTemp002
for ; πF.State() >= 0; πF.PopCheckpoint() {
switch πF.State() {
case 0:
default: panic("unexpected function state")
}
// line 1: def hello(): print "hello, world"
πF.SetLineno(1)
πTemp002 = make([]πg.Param, 0)
πTemp001 = πg.NewFunction(πg.NewCode("hello", "hello.py", πTemp002, 0, func(πF *πg.Frame, πArgs []*πg.Object) (*πg.Object, *πg.BaseException) {
var πTemp001 []*πg.Object
_ = πTemp001
var πR *πg.Object; _ = πR
var πE *πg.BaseException; _ = πE
for ; πF.State() >= 0; πF.PopCheckpoint() {
switch πF.State() {
case 0:
default: panic("unexpected function state")
}
// line 1: def hello(): print "hello, world"
πF.SetLineno(1)
πTemp001 = make([]*πg.Object, 1)
πTemp001[0] = πg.NewStr("hello, world").ToObject()
if πE = πg.Print(πF, πTemp001, true); πE != nil {
continue
}
}
if πE != nil {
πR = nil
} else if πR == nil {
πR = πg.None
}
return πR, πE
}), πF.Globals()).ToObject()
if πE = πF.Globals().SetItem(πF, ßhello.ToObject(), πTemp001); πE != nil {
continue
}
}
return nil, πE
})
πg.RegisterModule("__main__", Code)
}
当我尝试将 main 函数添加到 hello.go 的末尾并像这样调用 init() 时:
func main() {
init()
}
我在运行go build时收到此错误
can't load package: package .: main.go:1:2: expected 'package', found 'EOF'
【问题讨论】:
-
你的
main函数在哪里? -
Go 只能从带有
main函数的main包构建二进制文件。 -
我没有 main 函数 我试图编辑生成的代码以具有 main 函数,但编译失败,如何在 main 函数中调用 hello world 函数?代码看起来很陌生。
-
我将 main 函数添加到脚本末尾以调用 init() 但我收到此错误:
can't load package: package .:main.go:1:2: expected 'package', found 'EOF' -
@sam_com:你不要调用
init(),它会在包初始化时自动调用。