81

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

package zsdfsdf

import (
    "fmt"
)

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

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

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

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

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

4

5 回答 5

43

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

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

于 2014-05-26T13:10:34.127 回答
29

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

package Main

代替

package main
于 2017-01-25T18:24:37.820 回答
18

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

application: zsdfsdf

还可以从上面的链接中看到:

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

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

于 2014-05-26T13:10:09.910 回答
8

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

package main

// import statements 
import "fmt"

// code below
于 2018-12-16T15:23:10.333 回答
1

为避免该问题,您可以修改代码如下

package main

import (
    "fmt"
 )

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

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

于 2021-02-20T04:22:37.290 回答