рдЧреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 1.11 рдХреА рдЖрдЧрд╛рдореА рд░рд┐рд▓реАрдЬ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕рдорд░реНрдерди рд▓рд╛рдПрдЧреА - рдЧреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реАред (рдиреЛрдЯ рдЕрдиреБрд╡рд╛рдж: рд░рд┐рд▓реАрдЬ рд╣реБрдИ )
рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рд╕реА рдкреЛрд╕реНрдЯ рд▓рд┐рдЦреА рдереА ред рддрдм рд╕реЗ, рдХреБрдЫ рдереЛрдбрд╝рд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╣рдо рд░рд┐рд▓реАрдЬ рдХреЗ рдХрд░реАрдм рд╣реЛ рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирдП рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ - рдЪрд▓реЛ рдЕрдзрд┐рдХ рдЕрднреНрдпрд╛рд╕ рдЬреЛрдбрд╝реЗрдВред
рдЗрд╕рд▓рд┐рдП, рдпрд╣рд╛рдВ рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ: рдПрдХ рдирдпрд╛ рдкреИрдХреЗрдЬ рдмрдирд╛рдПрдВ рдФрд░ рдлрд┐рд░ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдореЙрдбреНрдпреВрд▓ рдирд┐рд░реНрдорд╛рдг
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдорд╛рд░рд╛ рдкреИрдХреЗрдЬ рдмрдирд╛рдПрдВред рдЗрд╕реЗ рдЯреЗрд╕реНрдЯрдореЙрдб рдХрд╣рддреЗ рд╣реИрдВред рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг: рдкреИрдХреЗрдЬ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдЖрдкрдХреЗ $GOPATH
рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐, рдЗрд╕рдХреЗ рдЕрдВрджрд░, рдореЙрдбреНрдпреВрд▓ рд╕рдорд░реНрдерди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рд╣реИ ред рдЧреЛ рдореЙрдбреНрдпреВрд▓ рднрд╡рд┐рд╖реНрдп рдореЗрдВ $GOPATH
рдкреВрд░реНрдг рдкрд░рд┐рддреНрдпрд╛рдЧ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдкрд╣рд▓рд╛ рдХрджрдо рд╣реИред
$ mkdir testmod $ cd testmod
рд╣рдорд╛рд░рд╛ рдкреИрдХреЗрдЬ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:
package testmod import "fmt"
рдкреИрдХреЗрдЬ рддреИрдпрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рддрдХ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВ рд╣реИ ред рдЪрд▓реЛ рдЗрд╕реЗ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВред
$ go mod init github.com/robteix/testmod go: creating new go.mod: module github.com/robteix/testmod
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреИрдХреЗрдЬ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ go.mod
рдирд╛рдордХ рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рд╣реИ:
module github.com/robteix/testmod
рдереЛрдбрд╝рд╛, рд▓реЗрдХрд┐рди рд╡рд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдкреИрдХреЗрдЬ рдХреЛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред
рдЕрдм рд╣рдо рдЗрд╕ рдХреЛрдб рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдзрдХреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ:
$ git init $ git add * $ git commit -am "First commit" $ git push -u origin master
рдЕрдм рддрдХ, рдЬреЛ рдХреЛрдИ рднреА рд╣рдорд╛рд░реЗ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рд╡рд╣ рд▓рд╛рдЧреВ go get
:
$ go get github.com/robteix/testmod
рдФрд░ рдпрд╣ рдХрдорд╛рдВрдб master
рд╢рд╛рдЦрд╛ рд╕реЗ рдирд╡реАрдирддрдо рдХреЛрдб рд▓рд╛рдПрдЧрд╛ред рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЕрднреА рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдЕрдм рдФрд░ рди рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм "рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИред" master
рд╢рд╛рдЦрд╛ рд╕реЗ рд╕реАрдзреЗ рдХреЛрдб рд▓реЗрдирд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЦрддрд░рдирд╛рдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХрднреА рднреА рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреИрдХреЗрдЬ рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдиреЗ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ "рддреЛрдбрд╝" рджрд┐рдпрд╛ рд╣реИ рдЬреЛ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЧреЛ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╡рд░реНрдЬрдирд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╡рд┐рд╖рдпрд╛рдВрддрд░
рдЧреЛ рдореЙрдбреНрдпреВрд▓ рд╕рдВрд╕реНрдХрд░рдгрд┐рдд рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдЕрд░реНрде рд╡рд░реНрдЬрдирд┐рдВрдЧ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧреЛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╕рдордп рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рд╕рдВрд╕реНрдХрд░рдг рдмрд╛рдХреА рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддреЗ рд╣реИрдВ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрд╕реНрдХрд░рдг 2 рдФрд░ рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг 0 рдФрд░ 1 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдЖрдпрд╛рдд рдкрде рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╣рдо рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ)ред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, Go рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИ , рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЯреИрдЧ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред
рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ master
рд╢рд╛рдЦрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдм рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкреИрдХреЗрдЬ рдХреА рд░рд┐рд▓реАрдЬрд╝ рдмрдирд╛рддреЗ рд╕рдордп, рд╣рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд▓реЗрдмрд▓ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЪрд▓реЛ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдкрдиреА рдкрд╣рд▓реА рд░рд┐рд▓реАрдЬ рдмрдирд╛ рд░рд╣реА рд╣реИ
рд╣рдорд╛рд░рд╛ рдкреИрдХреЗрдЬ рддреИрдпрд╛рд░ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕реЗ рдкреВрд░реА рджреБрдирд┐рдпрд╛ рдореЗрдВ "рд░реЛрд▓ рдЖрдЙрдЯ" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдпрд╣ рд╡рд░реНрдЬрди рдХрд┐рдП рдЧрдП рд▓реЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ 1.0.0 рд╣реЛрдиреЗ рджреЗрдВ:
$ git tag v1.0.0 $ git push --tags
рдпреЗ рдХрдорд╛рдВрдб рдореЗрд░реЗ рдЧрд┐рддреБрдм рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдПрдХ рдЯреИрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП 1.0.0 рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдкреНрд░рддрд┐рдмрджреНрдз рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЧреЛ рдЗрд╕ рдкрд░ рдЬреЛрд░ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдирдИ рд╢рд╛рдЦрд╛ ("v1") рдмрдирд╛рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдкреИрдЪ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред
$ git checkout -b v1 $ git push -u origin v1
рдЕрдм рд╣рдо рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЪрд┐рдВрддрд╛ рдХреЗ master
рдмреНрд░рд╛рдВрдЪ рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЕрдкрдиреА рд░рд┐рд╣рд╛рдИ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдЖрдЗрдП рдмрдирд╛рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╣рдо рдПрдХ рд╕рд░рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рд╣рдорд╛рд░реЗ рдирдП рдкреИрдХреЗрдЬ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ:
package main import ( "fmt" "github.com/robteix/testmod" ) func main() { fmt.Println(testmod.Hi("roberto")) }
рдЕрдм рддрдХ, рдЖрдк рдкреИрдХреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ go get github.com/robteix/testmod
рдкрд░ go get github.com/robteix/testmod
, рд▓реЗрдХрд┐рди рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдпрд╣ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдирдП рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рд╕рдорд░реНрдерди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
$ go mod init mod
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╢рд╛рдпрдж рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рдкрдврд╝рд╛ рдерд╛, рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ go.mod
рдлрд╝рд╛рдЗрд▓ рджрд┐рдЦрд╛рдИ рджреА:
module mod
рд╕реНрдерд┐рддрд┐ рдФрд░ рднреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЬрд╛рддреА рд╣реИ рдЬрдм рд╣рдо рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:
$ go build go: finding github.com/robteix/testmod v1.0.0 go: downloading github.com/robteix/testmod v1.0.0
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, go
рдХрдорд╛рдВрдб рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдЖрдпрд╛рддрд┐рдд рдкреИрдХреЗрдЬ рдХреЛ рдвреВрдВрдв рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд▓реЗрддрд╛ рд╣реИред
рдпрджрд┐ рд╣рдо рдЕрдкрдиреА go.mod
рдлрд╝рд╛рдЗрд▓ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ:
module mod require github.com/robteix/testmod v1.0.0
рдФрд░ рд╣рдореЗрдВ go.sum
рдирд╛рдордХ рдПрдХ рдФрд░ рдирдИ рдлрд╝рд╛рдЗрд▓ go.sum
, рдЬрд┐рд╕рдореЗрдВ рд╕рд╣реА рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреБрд▓ рдХреА рд╣реИрд╢ рд╢рд╛рдорд┐рд▓ рд╣реИред
github.com/robteix/testmod v1.0.0 h1:9EdH0EArQ/rkpss9Tj8gUnwx3w5p0jkzJrd5tRAhxnA= github.com/robteix/testmod v1.0.0/go.mod h1:UVhi5McON9ZLc5kl5iN2bTXlL6ylcxE9VInV71RrlO8=
рдмрдЧ рдлрд┐рдХреНрд╕ рд░рд┐рд▓реАрдЬрд╝ рд░рд┐рд▓реАрдЬрд╝ рдХрд░рдирд╛
рдЕрдм, рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА: рдЧреНрд░реАрдЯрд┐рдВрдЧ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд░рд╛рдо рдЪрд┐рд╣реНрди рдирд╣реАрдВ рд╣реИ!
рдХреБрдЫ рд▓реЛрдЧ рдЙрдЧреНрд░ рд╣реЛрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░рд╛ рджреЛрд╕реНрддрд╛рдирд╛ рдЕрднрд┐рд╡рд╛рджрди рдЕрдм рдЗрддрдирд╛ рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд╣реИред
рдЪрд▓реЛ рдЗрд╕реЗ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВ:
// Hi returns a friendly greeting func Hi(name string) string { - return fmt.Sprintf("Hi, %s", name) + return fmt.Sprintf("Hi, %s!", name) }
рд╣рдордиреЗ v1
рд╢рд╛рдЦрд╛ рдореЗрдВ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рд╕рд╣реА рдХрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ v2
рд╢рд╛рдЦрд╛ рдореЗрдВ рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ, рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ master
рдореЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ v1
рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдлрд┐рдХреНрд╕ v1
рд╢рд╛рдЦрд╛ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╣рдореЗрдВ рдЗрд╕реЗ рдПрдХ рдирдП рд░рд┐рд▓реАрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
$ git commit -m "Emphasize our friendliness" testmod.go $ git tag v1.0.1 $ git push --tags origin v1
рдореЙрдбреНрдпреВрд▓ рдЕрджреНрдпрддрди
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЧреЛ рдмрд┐рдирд╛ рдорд╛рдВрдЧ рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред "рдФрд░ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ," рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕рднреА рдЕрдкрдиреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рд╣реЛрдиреЗ рдкрд░ рдЧреЛ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рддреЛ рд╣рдо "рдЕрдВрдзреЗрд░реЗ рдпреБрдЧ рд╕реЗ рдкрд╣рд▓реЗ Go1.11" рдкрд░ рд▓реМрдЯ рдЖрдПрдВрдЧреЗред рд▓реЗрдХрд┐рди рдирд╣реАрдВ, рд╣рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреЛ рдХреЛ рдмрддрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдФрд░ рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ рдкреБрд░рд╛рдиреЗ рджреЛрд╕реНрдд рдХреА рдорджрдж рд╕реЗ рдХрд░реЗрдВрдЧреЗ - go get
:
рд░рди go get -u
рдЕрдВрддрд┐рдо рдирд╛рдмрд╛рд▓рд┐рдЧ рдпрд╛ рдкреИрдЪ рд░рд┐рд▓реАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдпрд╛рдиреА рдХрдорд╛рдВрдб 1.0.0 рд╕реЗ рдЕрджреНрдпрддрди рдХрд░реЗрдЧрд╛, рдХрд╣рддреЗ рд╣реИрдВ, 1.0.1 рдпрд╛ 1.1.0, рдЕрдЧрд░ рдРрд╕рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЙрдкрд▓рдмреНрдз рд╣реИ)
рд░рди go get -u=patch
рдирд╡реАрдирддрдо рдкреИрдЪ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдпрд╛рдиреА рдкреИрдХреЗрдЬ рдХреЛ 1.0.1 рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди 1.1.0 рддрдХ рдирд╣реАрдВ )
рд░рди go get package@version
рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, github.com/robteix/testmod@v1.0.1
)
рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рдирд╡реАрдирддрдо рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЬрд▓реНрдж рд╣реА рджреЗрдЦреЗрдВрдЧреЗред
рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдиреЗ рд╣рдорд╛рд░реЗ рдкреИрдХреЗрдЬ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 1.0.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рд╣рдордиреЗ рдЕрднреА рд╕рдВрд╕реНрдХрд░рдг 1.0.1 рдмрдирд╛рдпрд╛ рдерд╛, рдирд┐рдореНрди рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЖрджреЗрд╢ рд╣рдореЗрдВ 1.0.1 рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдЧрд╛:
$ go get -u $ go get -u=patch $ go get github.com/robteix/testmod@v1.0.1
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж (рдЪрд▓реЛ рдХрд╣рддреЗ go get -u
go.mod
), рд╣рдорд╛рд░реЗ go.mod
рдмрджрд▓ рдЧрдпрд╛ рд╣реИ:
module mod require github.com/robteix/testmod v1.0.1
рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг
рд╕рд┐рдореЗрдВрдЯрд┐рдХ рд╡рд░реНрдЬрдирд┐рдВрдЧ рдХреЗ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдмрдбрд╝рд╛ рд╡рд░реНрдЬрди рдорд╛рдореВрд▓реА рд╡рд░реНрдЬрди рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЧреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рд╣реИ ред
рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдЬрдВрдЧрд▓реА рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ: рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рджреЛ рд╕рдВрд╕реНрдХрд░рдг рдЬреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИрдВ, рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВред
рдЖрдЗрдП рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВред рдорд╛рди рд▓реАрдЬрд┐рдП, рд╕рдордп рдХреЗ рд╕рд╛рде, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рд╣рдорд╛рд░рд╛ рдПрдкреАрдЖрдИ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рд╕реАрдорд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╕реНрд╡рд╛рдЧрдд рднрд╛рд╖рд╛ рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Hi()
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
package testmod import ( "errors" "fmt" )
рд╣рдорд╛рд░реЗ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЯреВрдЯ рдЬрд╛рдПрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдП) рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рднрд╛рд╖рд╛ рдХреЛ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмреА) рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕реА рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░рд╛ рдирдпрд╛ API рдЕрдм рд╕рдВрд╕реНрдХрд░рдг 1.x рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг 2.0.0 рд╕реЗ рдорд┐рд▓реЗрдВред
рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛ рдХрд┐ рдХреБрдЫ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рдФрд░ рдЕрдм рдпрд╣ рдорд╛рдорд▓рд╛ рд╣реИред
рд╕рдВрд╕реНрдХрд░рдг 2 рдпрд╛ рдмрд╛рдж рдореЗрдВ рдЖрдпрд╛рдд рдкрде рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдм рдпреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВред
рд╣рдо рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд╛рдо рдореЗрдВ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдкрде рдЬреЛрдбрд╝рдХрд░ рдРрд╕рд╛ рдХрд░реЗрдВрдЧреЗред
module github.com/robteix/testmod/v2
рдмрд╛рдХреА рд╕рдм рд╕рдорд╛рди рд╣реИ: рдзрдХреНрдХрд╛, рдПрдХ рд▓реЗрдмрд▓ рд▓рдЧрд╛рдУ рдХрд┐ рдпрд╣ v2.0.0 рд╣реИ (рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рд╢рд╛рдЦрд╛ v2 sod)
$ git commit testmod.go -m $ git checkout -b v2 # optional but recommended $ echo > go.mod $ git commit go.mod -m $ git tag v2.0.0 $ git push --tags origin v2 # or master if we don't have a branch
рдореЗрдЬрд░ рд╡рд░реНрдЬрди рдЕрдкрдбреЗрдЯ
рднрд▓реЗ рд╣реА рд╣рдордиреЗ рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдПрдХ рдирдпрд╛ рдЕрд╕рдВрдЧрдд рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд╣реАрдВ рдЯреВрдЯреЗ , рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рдВрд╕реНрдХрд░рдг 1.0.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред
go get -u
рд╕рдВрд╕реНрдХрд░рдг 2.0.0 рдбрд╛рдЙрдирд▓реЛрдб рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ ред
рд▓реЗрдХрд┐рди рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, рдореИрдВ, рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рд╕рдВрд╕реНрдХрд░рдг 2.0.0 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реВрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рддрджрдиреБрд╕рд╛рд░ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛:
package main import ( "fmt" "github.com/robteix/testmod/v2" ) func main() { g, err := testmod.Hi("Roberto", "pt") if err != nil { panic(err) } fmt.Println(g) }
рдЕрдм, рдЬрдм рдореИрдВ go build
рд╕рдВрдЪрд╛рд▓рди рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ "рдХреНрд╡рд┐рдЯ" рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг 2.0.0 рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджреНрдпрдкрд┐ рдЖрдпрд╛рдд рдкрде рдЕрдм "v2" рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдЗрд╕рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд╛рдо ("рдЯреЗрд╕реНрдЯрдореЙрдб") рджреНрд╡рд╛рд░рд╛ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рд╣рд░ рддрд░рд╣ рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рд╣реИред рдпреЗ рджреЛ рдЧреЛ рдореЙрдбреНрдпреВрд▓ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмрд╛рдЗрдирд░реА рдореЗрдВ рджреЛ рдЕрд╕рдВрдЧрдд рд╕рдВрд╕реНрдХрд░рдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
package main import ( "fmt" "github.com/robteix/testmod" testmodML "github.com/robteix/testmod/v2" ) func main() { fmt.Println(testmod.Hi("Roberto")) g, err := testmodML.Hi("Roberto", "pt") if err != nil { panic(err) } fmt.Println(g) }
рдФрд░ рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕рд╛рде рдЖрдо рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдЬрдм рдирд┐рд░реНрднрд░рддрд╛ рдПрдХ рд╣реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред
рд╣рдо рдЪреАрдЬреЛрдВ рдХреЛ рдХреНрд░рдо рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ
рдЪрд▓реЛ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдХреЗрд╡рд▓ рдЯреЗрд╕реНрдЯрдореЙрдб 2.0.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдЕрдЧрд░ рд╣рдо go.mod
рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ go.mod
, рддреЛ рд╣рдо рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗ:
module mod require github.com/robteix/testmod v1.0.1 require github.com/robteix/testmod/v2 v2.0.0
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, Go рддрдм рддрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ go.mod
рд╕реЗ рдирд╣реАрдВ go.mod
рдЬрдм рддрдХ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдкреВрдЫрддреЗред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдирдХреА рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдл рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирдИ tidy
рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
$ go mod tidy
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
vendoring
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ vendor/
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рдЪрд╛рд░ рдзреАрд░реЗ-рдзреАрд░реЗ рд╡реЗрдВрдбрд┐рдВрдЧ 1 рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдЕрднреА рднреА рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП "рдЕрд▓рдЧ" рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
$ go mod vendor
рдЯреАрдо рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдореВрд▓ рдореЗрдВ vendor/
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдЧреА, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реЛрдВрдЧреЗред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ go build
рдЕрднреА рднреА рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк vendor/
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдПрдХрддреНрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рд┐рдПред
$ go build -mod vendor
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬреЛ рд╡реЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ go build
, рд╡реЗ рдЕрдкрдиреА рдорд╢реАрдиреЛрдВ рдкрд░, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, go build
рдХрд╛ рдЙрдкрдпреЛрдЧ -mod vendor
рдФрд░ рдЕрдкрдиреЗ CI рдкрд░ -mod vendor
рдЙрдкрдпреЛрдЧ -mod vendor
ред
рдлрд┐рд░, рдЧреЛ рдореЙрдбреНрдпреВрд▓ рд╡реЗрдВрдбрд┐рдВрдЧ рдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рджреВрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╕реАрдзреЗ рдЕрдкрд╕реНрдЯреНрд░реАрдо рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рд╕реЗрд╡рд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ go
рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, GOPROXY=off
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ), рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рд▓реЗрдЦ рдХрд┐рд╕реА рдХреЛ рдЬрдЯрд┐рд▓ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЧреЛ рдореЙрдбреНрдпреВрд▓ рдЖрдо рддреМрд░ рдкрд░ рдЖрдЬ рд╕рд░рд▓ рд╣реИрдВ - рд╣рдо рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдкреИрдХреЗрдЬ рдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ go
рдЯреАрдо рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╛рдХреА рдХрд╛рдо рдХрд░рддреА рд╣реИред рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рджреМрд░рд╛рди рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рднрд░реА рд╣реБрдИ рд╣реИрдВред
рдореЙрдбреНрдпреВрд▓ $GOPATH
рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рднреА рд╕рдорд╛рдкреНрдд рдХрд░ $GOPATH
, рдЬреЛ рдирдП Go рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдареЛрдХрд░ рдерд╛, рдЬрд┐рдиреНрд╣реЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдереА рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреБрдЫ рдХреНрдпреЛрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╡реЗрдВрдбрд┐рдВрдЧ (рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ) рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред 1
рдореИрдВ рдЧреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдкрд░рджреЗ рдХреЗ рдкреАрдЫреЗ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВред
рдЯрд┐рдкреНрдкрдгреА:
1 рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рддреЗрдЬрд╝ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ рдФрд░ рдХреБрдЫ рдХреЛ рдЖрднрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрднреА рд╡реЗрдВрдбрд┐рдВрдЧ рдХреЛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рд╡реЗрдВрдбрд┐рдВрдЧ рдЕрднреА рднреА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╡реЗрдВрдбрд┐рдВрдЧ рдХреЛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреНрд░реЙрдХреНрд╕реА (рдПрдХ рддрдереНрдп рдирд╣реАрдВ)ред рдЕрдм рддрдХ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рдХреА рдЦреЛрдЬ рд╣реИред рдЬрдм рддрдХ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ (рдпрджрд┐ рдХреЛрдИ рд╣реИ) рддреЛ рд╡реЗрдВрдбрд┐рдВрдЧ рджреВрд░ рдирд╣реАрдВ рдЬрд╛рдПрдЧреАред