由Grumpy生成的helloworld.go的二进制文件无法生成

时间:2018-02-02 19:30:33

标签: python go grumpy

我写了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'

1 个答案:

答案 0 :(得分:0)

我知道这是一篇旧文章,但是python文件中的以下代码可能有效:

def hello():
        print("hello, world")
if __name__ == "__main__": 
    hello()

现在go将创建其自己的主要功能,并且很可能会起作用。 (免责声明:我自己还没有尝试过)。