рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреИрд╕реЗ рдЧреЛ рдбреЗрд╡рд▓рдкрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдХрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
Makefiles рдХреНрдпрд╛ рд╣реИрдВ?
рдореЗрдХрдлрд╛рдЗрд▓ рдПрдХ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╕реНрд╡рдЪрд╛рд▓рди рдЙрдкрдХрд░рдг рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк рди рдХреЗрд╡рд▓ рдЧреЛ рдкрд░, рдмрд▓реНрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рд╛рдиреЗ рдФрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕реЗ рдЕрдХреНрд╕рд░ Github рдФрд░ Gitlab рдкрд░ рдХрдИ рдЧреЛ рдРрдк рдХреА рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП Go рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореЗрдХрдлрд╛рдЗрд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛:
- рд╕рд░рд▓ рдЖрджреЗрд╢реЛрдВ рдХреЗ рдЖрд╣реНрд╡рд╛рди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░реЗрдВ, рдЬреИрд╕реЗ: рд╕рдВрдХрд▓рди, рдкреНрд░рд╛рд░рдВрдн, рд░реЛрдХ, рдШрдбрд╝реА, рдЖрджрд┐ред
- рдкреНрд░реЛрдЬреЗрдХреНрдЯ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВред рдЗрд╕рдореЗрдВ .env рдлрд╝рд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
- рдПрдХ рд╡рд┐рдХрд╛рд╕ рдореЛрдб рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред
- рдПрдХ рд╡рд┐рдХрд╛рд╕ рдореЛрдб рдЬреЛ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
- рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП GOPATH рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рддрд╛рдХрд┐ рд╣рдо рд╡рд┐рдХреНрд░реЗрддрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХреЗрдВред
- рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕рд░рд▓реАрдХреГрдд рдлрд╝рд╛рдЗрд▓ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ, рд╡реЙрдЪ рд░рди рдмрдирд╛рдирд╛ = "рдкрд░реАрдХреНрд╖рдг рдЬрд╛рдирд╛"ред / ... "
рдпрд╣рд╛рдБ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ:
.env Makefile main.go bin/ src/ vendor/
рдпрджрд┐ рд╣рдо рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдореЗрдХ рдХрдорд╛рдВрдб рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрди рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рддреЗ рд╣реИрдВ:
$ make Choose a command run in my-web-server: install Install missing dependencies. Runs `go get` internally. start Start in development mode. Auto-starts when code changes. stop Stop development mode. compile Compile the binary. watch Run given command when code changes. eg; make watch run="go test ./..." exec Run given command, wrapped with custom GOPATH. eg; make exec run="go test ./..." clean Clean build files. Runs `go clean` internally.
рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░
рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рд╣рдо рдореЗрдХрдлрд╛рдЗрд▓ рд╕реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡рд╣ рд╣реИ рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
include .env
рдЕрдЧрд▓рд╛, рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд╛рдо рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд╝реЛрд▓реНрдбрд░ / рдлрд╝рд╛рдЗрд▓реЗрдВ, рдкрде рдкрд░ рдЬрд╛рдПрдБ ...
PROJECTNAME=$(shell basename "$(PWD)")
Makefile рдХреЗ рд╢реЗрд╖ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдЕрдХреНрд╕рд░ GOPATH рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╣рдорд╛рд░реА рд╕рднреА рдЯреАрдореЛрдВ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ GOPATH рдХреЗ рд╕рд╛рде рд╕рдВрдмрджреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рд╡реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдПрдХ рд╕реНрд╡рдЪреНрдЫ рдЕрд▓рдЧрд╛рд╡ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрд╛рдо рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░реНрдп рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдХрдорд╛рдВрдб рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ GOPATH рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХреБрдЫ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдореЗрдХрдлрд╛рдЗрд▓ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╡рд┐рдХрд╛рд╕ рдореЛрдб
рд╡рд┐рдХрд╛рд╕ рдореЛрдб рдЪрд╛рд╣рд┐рдП:
- рдХреИрд╢ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ
- рд╕рдВрдХрд▓рди рдХреЛрдб
- рд╕реЗрд╡рд╛ рдХреЛ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЪрд▓рд╛рдПрдВ
- рдХреЛрдб рдмрджрд▓рдиреЗ рдкрд░ рдЗрди рдЪрд░рдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдПрдВред
рдпрд╣ рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдард┐рдирд╛рдИ рдЗрд╕ рддрдереНрдп рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рд╕рд╛рде рд╕реЗрд╡рд╛ рдФрд░ рдлрд╝рд╛рдЗрд▓-рд╡реЙрдХрд░ рджреЛрдиреЛрдВ рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдирдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрдВрдж рд╣реЛ рдЬрд╛рдП рдФрд░ рдХрдВрдЯреНрд░реЛрд▓-рд╕реА рдпрд╛ рдХрдВрдЯреНрд░реЛрд▓-рдбреА рджрдмрд╛рддреЗ рд╕рдордп рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рди рдХрд░реЗрдВред
start: bash -c "trap 'make stop' EXIT; $(MAKE) compile start-server watch run='make compile start-server'" stop: stop-server
рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХреЛрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ:
- рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рд╕реЗрд╡рд╛ рдЪрд▓рд╛рддрд╛ рд╣реИред
- рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдирд╣реАрдВ рдЪрд▓рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рдг-рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╛рдзрд┐рдд рд╣реЛрдиреЗ рдкрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд░реБрдХ рдЬрд╛рддреА рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд╛рд▓ рдХреА рдЬрд░реВрд░рдд рд╣реИред
- рдХреЛрдб рдмрджрд▓рдиреЗ рдкрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрднрд╛рдЧреЛрдВ рдореЗрдВ, рдореИрдВ рдЗрди рдЖрджреЗрд╢реЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдКрдВрдЧрд╛ред
рд╕рдВрдХрд▓рди
рд╕рдВрдХрд▓рд┐рдд рдЖрджреЗрд╢ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдХреЗрд╡рд▓ рд╕рдВрдХрд▓рд┐рдд рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рддреНрд░реБрдЯрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕рд░рд▓реАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред
рдЬрдм рд╣рдо рдмреНрд░реЗрдХрд┐рдВрдЧ рдПрдбрд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЖрдЙрдЯрдкреБрдЯ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

compile: @-touch $(STDERR) @-rm $(STDERR) @-$(MAKE) -s go-compile 2> $(STDERR) @cat $(STDERR) | sed -e '1s/.*/\nError:\n/' | sed 's/make\[.*/ /' | sed "/^/s/^/ /" 1>&2
рд╕рд░реНрд╡рд░ рдкреНрд░рд╛рд░рдВрдн / рдмрдВрдж
рд╕реНрдЯрд╛рд░реНрдЯ-рд╕рд░реНрд╡рд░ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдмрд╛рдЗрдирд░реА рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрд╕рдХрд╛ PID рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реЗрд╡ рд╣реЛрддрд╛ рд╣реИред рд╕реНрдЯреЙрдк-рд╕рд░реНрд╡рд░ рдкреАрдЖрдИрдбреА тАЛтАЛрдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдорд╛рд░рддрд╛ рд╣реИред
start-server: @echo " > $(PROJECTNAME) is available at $(ADDR)" @-$(GOBIN)/$(PROJECTNAME) 2>&1 & echo $$! > $(PID) @cat $(PID) | sed "/^/s/^/ \> PID: /" stop-server: @-touch $(PID) @-kill `cat $(PID)` 2> /dev/null || true @-rm $(PID) restart-server: stop-server start-server
рдирд┐рдЧрд░рд╛рдиреА рдмрджрд▓реЗрдВ
рд╣рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЙрдЪрд░ рдлрд╝рд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдХрдИ рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдПрдХ рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдлрд╝рд╛рдЗрд▓ рдирд┐рдЧрд░рд╛рдиреА рдЙрдкрдХрд░рдг -
рдпреЛрд▓реЛ рд▓рд┐рдЦрд╛ред рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
$ go get github.com/azer/yolo
рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, рд╣рдо рд╡рд┐рдХреНрд░реЗрддрд╛ рдФрд░ рдмрд┐рди рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡реЙрдЪ рдХрдорд╛рдВрдб рд╣реИ, рдЬреЛ рд╡реЗрдВрдбрд░ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдмрджрд▓рд╛рд╡реЛрдВ рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдмрд╕ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рдЖрджреЗрд╢ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдмрджрд▓рдиреЗ рдкрд░ рдХреЙрд▓ рдореЗрдХ-рд╕реНрдЯрд╛рд░реНрдЯ-рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░реЗрдВ:
make watch run="make compile start-server"
рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдпрд╛ рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ GOPATH рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:
make watch run="go test ./..."
рдпреЛрд▓реЛ рдХреА рдПрдХ рдЕрдЪреНрдЫреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдЗрд╕рдХрд╛ рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рддреБрд░рдВрдд рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЕрдкрдиреЗ рдХрдорд╛рдВрдб рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ -a рд╡рд┐рдХрд▓реНрдк рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
yolo -i . -e vendor -e bin -c "go run foobar.go" -a localhost:9001
рдХрд┐рд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: 9001 рдЦреЛрд▓реЗрдВ рдФрд░ рддреБрд░рдВрдд рдХрд╛рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВ:

рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрдирд╛
рдЬрдм рд╣рдо рдХреЛрдб рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ рдЕрдиреБрдкрд▓рдмреНрдзрддрд╛ рд╕рдВрдХрд▓рди рд╕реЗ рдкрд╣рд▓реЗ рд▓реЛрдб рд╣реЛ рдЬрд╛рдПред рдЗрдВрд╕реНрдЯреЙрд▓ рдХрдорд╛рдВрдб рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧреА:
install: go-get
рдЬрдм рд╕рдВрдХрд▓рди рд╕реЗ рдкрд╣рд▓реЗ рдлрд╝рд╛рдЗрд▓ рдмрджрд▓рддреА рд╣реИ, рддреЛ рд╣рдо рдЗрдВрд╕реНрдЯреЙрд▓ рдХреЙрд▓ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░ рджреЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧреАред рдпрджрд┐ рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
make install get="github.com/foo/bar"
рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ, рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рдореНрди рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
$ GOPATH=~/my-web-server GOBIN=~/my-web-server/bin go get github.com/foo/bar
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдЕрдЧрд▓рд╛ рднрд╛рдЧ рджреЗрдЦреЗрдВ рдЬрд╣рд╛рдВ рд╣рдо рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреЗ рдЖрджреЗрд╢реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдорд┐рдд рдЧреЛ рдХрдорд╛рдВрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рдЬрд╛рдУ рдХрдорд╛рдВрдбреНрд╕
рдЪреВрдБрдХрд┐ рд╣рдо рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ GOPATH рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдЕрднреА рддрдХ рдЧреЛ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рддрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдореЗрдВ Makefile рдореЗрдВ рд╕рднреА рдЧреЛ рдХрдорд╛рдВрдб рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
go-compile: go-clean go-get go-build go-build: @echo " > Building binary..." @GOPATH=$(GOPATH) GOBIN=$(GOBIN) go build -o $(GOBIN)/$(PROJECTNAME) $(GOFILES) go-generate: @echo " > Generating dependency files..." @GOPATH=$(GOPATH) GOBIN=$(GOBIN) go generate $(generate) go-get: @echo " > Checking if there is any missing dependencies..." @GOPATH=$(GOPATH) GOBIN=$(GOBIN) go get $(get) go-install: @GOPATH=$(GOPATH) GOBIN=$(GOBIN) go install $(GOFILES) go-clean: @echo " > Cleaning build cache" @GOPATH=$(GOPATH) GOBIN=$(GOBIN) go clean
рд╕рд╣рд╛рдпрддрд╛
рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХрдорд╛рдВрдб рдХреА рд╕реВрдЪреА рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрддрд╛ рдХрдорд╛рдВрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реЗрдб рдФрд░ рдХреЙрд▓рдо рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рд╕реНрд╡рд░реВрдкрд┐рдд рд╕рд╣рд╛рдпрддрд╛ рдЖрдЙрдЯрдкреБрдЯ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
help: Makefile @echo " Choose a command run in "$(PROJECTNAME)":" @sed -n 's/^
рдирд┐рдореНрди рдХрдорд╛рдВрдб ## рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрдХрдлрд╛рдЗрд▓ рдХреЛ рд╕реНрдХреИрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣, рдЖрдк рдХреЗрд╡рд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдорд╛рдВрдб рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрджрд┐ рд╣рдо рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ:
$ make help Choose a command run in my-web-server: install Install missing dependencies. Runs `go get` internally. start Start in development mode. Auto-starts when code changes. stop Stop development mode.
рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг
include .env PROJECTNAME=$(shell basename "$(PWD)")