繁体   English   中英

go run: 不能运行非主包

[英]go run: cannot run non-main package

这里是简单的 go 应用程序。 如果我运行以下代码,我会收到“go run: cannot run non-main package”错误。

package zsdfsdf

import (
    "fmt"
)

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

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

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

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

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

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

不过,GAE 是个例外。 他们添加了一个main包,自动包含main函数到你的项目中。 因此,不允许您自己编写。

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

package Main

代替

package main

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

application: zsdfsdf

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

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

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

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

package main

// import statements 
import "fmt"

// code below

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

package main

import (
    "fmt"
 )

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM