【问题标题】:binary file of the helloworld.go generated by Grumpy does not get generatedGrumpy 生成的 helloworld.go 的二进制文件不会生成
【发布时间】:2019-05-28 11:50:31
【问题描述】:

我写了一个HelloWorld.py 并使用grumpyHelloWorld.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(),它会在包初始化时自动调用。

标签: python go grumpy


【解决方案1】:

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

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

现在 go 将创建自己的 main 函数并且很可能会工作。 (免责声明:我自己还没有尝试过)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    相关资源
    最近更新 更多