As a Python and Django developer, I can run any piece of code in my project using a script independently.
I am not too sure how to achieve the same thing in Go, as it looks like each Go project should only have one main executable file.
I'd like to call a function in my project from cronjob, but I'm not too sure how to add that. Using flags in my main function is the only way I can think of doing this. But it will look pretty confusing if my script accepts additional flags by itself like the following:
go run server.go --debug --another-flag --script-name <MY-SCRIPT> --my-script-flag-one <FLAG-ONE> --my-script-flag-two <FLAG-TWO>
Is there any elegant way of doing this?
You can have multiple main function in go but the package should be declared main. This way you can have multiple go scripts/file inside package main where each file will have main function.
In the go language, we can not run any function or program without the main function; even any custom function also depends on the main function.
In Go language, the main package is a special package which is used with the programs that are executable and this package contains main() function. The main() function is a special type of function and it is the entry point of the executable programs. It does not take any argument nor return anything.
Go main package The package main tells the Go compiler that the package should compile as an executable program instead of a shared library. The main function in the main package is the entry point of the program.
I reference in "What is a sensible way to layout a Go project" the article "Structuring Applications in Go", which shows as an example the project perkeep.
That project includes several cmd packages, each with their own set of options.
The other option would be to use a CLI interface library like spf13/cobra
, which allows you to define several commands (same exe, separate sets of options).
Command
is the central point of the application.
Each interaction that the application supports will be contained in aCommand
.
A command can have children commands and optionally run an action.
In the example "
hugo server --port=1313
", 'server
' is the command
A
Command
has the following structure:
type Command struct {
Use string // The one-line usage message.
Short string // The short description shown in the 'help' output.
Long string // The long message shown in the 'help <this-command>' output.
Run func(cmd *Command, args []string) // Run runs the command.
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With