Skip to content
Nick Miyake edited this page Apr 2, 2021 · 3 revisions

Summary

./godelw run can be used to run a product from source.

Tutorial start state

  • ${GOPATH}/src/${PROJECT_PATH} exists, is the working directory and is initialized as a Git repository and Go module
  • Project contains godel and godelw
  • Project contains main.go
  • Project contains .gitignore that ignores GoLand files
  • Project contains echo/echo.go, echo/echo_test.go and echo/echoer.go
  • godel/config/dist.yml is configured to build echgo2
  • Project is tagged as 0.0.1

Run

echgo2 is now defined as a product and can be built using build. Its functionality can be tested using tests or by invoking the executable that was built with build.

Although the program can be run by building the product and invoking the executable (or by running go install and running the executable), this can be cumbersome for quick iteration. ./godelw run can be used to quickly build and run a product from source for faster iteration.

Use ./godelw run to invoke echgo2:

➜ ./godelw run echgo2 foo
/usr/local/go/bin/go run -ldflags -X main.version=0.0.1 /go/src/github.com/nmiyake/echgo2/main.go foo
foo

This uses go run to run the product. Note that the build flags configured for the product in its build section are automatically provided to the go run invocation.

Because the run task uses go run, it does not build the product using the build parameters specified in the configuration. This can be verified by running the command with the -version flag and verifying the output. All of the flags and arguments provided after the name of the product to run are passed to the product using go run. The -- operator should be used after the product name to disable flag parsing. Run the following to run the equivalent of echgo2 -version:

➜ ./godelw run echgo2 -- -version
/usr/local/go/bin/go run -ldflags -X main.version=0.0.1 /go/src/github.com/nmiyake/echgo2/main.go -version
echgo2 version: 0.0.1

Tutorial end state

  • ${GOPATH}/src/${PROJECT_PATH} exists, is the working directory and is initialized as a Git repository and Go module
  • Project contains godel and godelw
  • Project contains main.go
  • Project contains .gitignore that ignores GoLand files
  • Project contains echo/echo.go, echo/echo_test.go and echo/echoer.go
  • godel/config/dist.yml is configured to build echgo2
  • Project is tagged as 0.0.1

Tutorial next step

Dist