go run: cannot run non-main package
Solution 1:
The entry point of each go program is main.main
, i.e. a function called main in a package called main. You have to provide such a main package.
GAE is an exception though. They add a main
package, containing the main
function automatically to your project. Therefore, you are not allowed to write your own.
Solution 2:
You need to use the main package, a common error starting with go is to type
package Main
instead of
package main
Solution 3:
You need to specify in your app.yaml file what your app access point is. Take a look here. You need to specify:
application: zsdfsdf
Also see from that above link:
"Note: When writing a stand-alone Go program we would place this code in package main. The Go App Engine Runtime provides a special main package, so you should put HTTP handler code in a package of your choice (in this case, hello)."
You are correct that all Go programs need the Main
method. But it is provided by Google App Engine. That is why your provided example works. Your example would not work locally (not on GAE).
Solution 4:
A Solution to avoid this error is defining entry point somefilename.go
file as main package by adding package main
as the first line of the entry point
package main
// import statements
import "fmt"
// code below