go run:无法运行非主包

qin*_*126 43 google-app-engine go

这里是简单的应用程序.如果我运行以下代码,我得到"运行:无法运行非主程序包"错误.

package zsdfsdf

import (
    "fmt"
)

func Main() {
    fmt.Println("sddddddd")
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

tux*_*21b 28

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

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


Pab*_*rra 14

你需要使用主包,一个以go开头的常见错误是type

package Main
Run Code Online (Sandbox Code Playgroud)

代替

package main
Run Code Online (Sandbox Code Playgroud)


Sam*_*m P 8

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

application: zsdfsdf
Run Code Online (Sandbox Code Playgroud)

从上面的链接也看到:

"注意:在编写独立的Go程序时,我们会将此代码放在包main中.Go App Engine Runtime提供了一个特殊的主包,因此您应该将HTTP处理程序代码放在您选择的包中(在本例中为hello) )".

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


Mar*_*rty 8

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

package main

// import statements 
import "fmt"

// code below
Run Code Online (Sandbox Code Playgroud)