[英]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.