【问题标题】:go run: cannot run non-main packagego run:不能运行非主包
【发布时间】:2014-07-15 06:24:53
【问题描述】:

这里是简单的 go 应用程序。如果我运行以下代码,我会收到“运行:无法运行非主包”错误。

package zsdfsdf

import (
    "fmt"
)

func Main() {
    fmt.Println("sddddddd")
}

要修复它,我只需要将包命名为main。但我不明白为什么我需要这样做。我应该可以随意命名包。

另外一个问题,我知道main函数是程序的入口点,你需要它。否则它将无法正常工作。但是我看到一些没有 main 函数的代码仍然有效。

点击这个链接,页面底部的例子没有使用包main和main函数,它仍然有效。只是好奇为什么。

https://developers.google.com/appengine/docs/go/gettingstarted/usingdatastore

【问题讨论】:

    标签: go google-app-engine-go


    【解决方案1】:

    每个go程序的入口点是main.main,即main包中的main函数。你必须提供这样一个主包。

    GAE 是个例外。他们会自动添加一个main 包,其中包含main 函数到您的项目中。因此,你不能自己写。

    【讨论】:

      【解决方案2】:

      需要用到主包,go开头的常见错误是输入

      package Main
      

      而不是

      package main
      

      【讨论】:

        【解决方案3】:

        您需要在 app.yaml 文件中指定您的应用访问点是什么。看看here。您需要指定:

        application: zsdfsdf
        

        从上面的链接也可以看到:

        "注意:在编写独立的 Go 程序时,我们会放置此代码 在主包中。 Go App Engine 运行时提供了一个特殊的 main 包,所以你应该把 HTTP 处理程序代码放在你的包中 选择(在这种情况下,你好)。”

        您是正确的,所有 Go 程序都需要 Main 方法。但它是由 Google App Engine 提供的。这就是您提供的示例有效的原因。您的示例无法在本地运行(不适用于 GAE)。

        【讨论】:

          【解决方案4】:

          避免此错误的解决方案是通过添加 package main 作为入口点的第一行来将入口点 somefilename.go 文件定义为主包

          package main
          
          // import statements 
          import "fmt"
          
          // code below
          

          【讨论】:

            【解决方案5】:

            为了避免这个问题,你可以修改代码如下

            package main
            
            import (
                "fmt"
             )
            
            func main() {
                fmt.Println("sddddddd")
             }
            

            将包重命名为“main”并将函数重命名为“main”而不是“Main”。

            【讨论】:

            • 作者知道怎么解决。他的问题是他为什么需要这样做。
            猜你喜欢
            • 2019-09-21
            • 1970-01-01
            • 2018-01-07
            • 2020-11-04
            • 2021-01-17
            • 1970-01-01
            • 2020-06-10
            • 1970-01-01
            相关资源
            最近更新 更多