go run:无法运行非主包

时间:2014-05-26 13:02:25

标签: google-app-engine go

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

package zsdfsdf

import (
    "fmt"
)

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

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

另一个问题,我知道主要功能是程序的切入点,你需要它。否则它将无法工作。但是我看到一些没有主要功能的代码仍然可以使用。

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

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

5 个答案:

答案 0 :(得分:26)

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

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

答案 1 :(得分:10)

您需要使用主程序包,以go开头的常见错误是

package Main

代替

package main

答案 2 :(得分:7)

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

application: zsdfsdf

另见上述链接:

  

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

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

答案 3 :(得分:2)

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

package main

import (
    "fmt"
 )

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

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

答案 4 :(得分:1)

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

package main

// import statements 
import "fmt"

// code below