рдХреНрдпрд╛ рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ GOPATH рдФрд░ GOROOT рдХреА рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ?

рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬреЛ рдЕрднреА рдЧреЛ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЕрдХреНрд╕рд░ рдЧреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЪреБрдирдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЧреЛрд▓рдВрдЧрдХреЙрдиреНрдлрд╝ рд╕рдореНрдореЗрд▓рди рдХреА рдмрд╛рддрдЪреАрдд рдореЗрдВ , рдпрд╣ рдкреНрд░рд╢реНрди рднреА рдкреВрдЫрд╛ рдЧрдпрд╛ рдерд╛ред рдирдП Gophers рдЕрдХреНрд╕рд░ GOPATH рдФрд░ GOROOT рд╢рдмреНрджреЛрдВ рд╕реЗ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдбрд░рд╛рддреЗ рд╣реИрдВ ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЧреЛ (1.13) рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рддреНрд╡рд░рд┐рдд рдЖрд░рдВрдн рдЧрд╛рдЗрдбреЛрдВ рдореЗрдВ, рдЗрди рджреЛ "рдбрд░рд╛рд╡рдиреЗ" рд╢рдмреНрджреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХреНрдпреЛрдВред рдкреНрд░рдпреЛрдЧ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рддрд╛рдЬрд╛ рдЙрдмрдВрдЯреВ рдХреЛ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкрд░ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдФрд░ рд╡рд┐рдХреА рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЧреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛:


sudo add-apt-repository ppa:longsleep/golang-backports sudo apt-get update sudo apt-get install golang-go 

рдЬрд╛рдУ 1.13 рд╕реНрдерд╛рдкрд┐рдд рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ:


 $ go version go version go1.13 linux/amd64 $ which go /usr/bin/go $ whereis go go: /usr/bin/go /usr/lib/go /usr/share/go /usr/share/man/man1/go.1.gz 

GOROOT


GOROOT рдмрд╛рд░реЗ рдореЗрдВ 2015 рдХреЗ рдПрдХ рд▓реЗрдЦ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдЕрднреА рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред


рдпрд╣ рдордЬреЗрджрд╛рд░ рд╣реИ рдХрд┐ рдЕрдВрддрд┐рдо рдЖрджреЗрд╢ ( GOROOT whereis go ) рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХреА рдЧрдИ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ, GOROOT рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реИ:


 $ go env GOROOT /usr/lib/go-1.13 

рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдЖрдИрдбреАрдИ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдорд╛рдирдХ рдЧреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВ /usr/lib/go-1.13 рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВрдВрдЧрд╛ред рд╢рд╛рдпрдж, рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ, рд░реЛрдЬрдорд░реНрд░рд╛ рдХреА рдЬрд┐рдВрджрдЧреА рдореЗрдВ GOROOT рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред


GOPATH рдФрд░ рдореЙрдбреНрдпреВрд▓


рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЬрдЧрд╣ рдореЗрдВ GOPATH рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ GOPATH рдкрд╣рд▓реЗ GOPATH рд╣реА рд╕реЗрдЯ рд╣реИ:


 $ go env GOPATH /home/elena/go 

рдореИрдВ ~/go рдореЗрдВ GOPATH рд╕рд╛рде рд╕рд╣рдЬ рд╣реВрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред


рдореИрдВ рддреБрд░рдВрдд рдЧреЛ рдкрд░ рдЕрдкрдиреА рдкрд╣рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдКрдВрдЧрд╛ред рдпрд╣ рдХрд╣реАрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рд╣реЛрдо рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рддреБрд░рдВрдд рдЧреЛ рдореЙрдбреНрдпреВрд▓ рдЯреВрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛:


 $ mkdir ~/hello $ go mod init github.com/rumyantseva/hello go: creating new go.mod: module github.com/rumyantseva/hello 

go mod init рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдореЙрдбреНрдпреВрд▓ рдореЙрдбреНрдпреВрд▓ рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ред рдЗрд╕ рддрд░рд╣, рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдпрд╛ рдЕрдиреНрдп рдЙрдкрдХрд░рдг, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдлрд╛рдЗрд▓реЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред


go mod init рдХрдорд╛рдВрдб рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, go mod init рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрд░реЗ рд╣реЛрдо рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреА:


 $ tree ~/go /home/elena/go тФФтФАтФА pkg тФФтФАтФА mod тФФтФАтФА cache тФФтФАтФА lock 3 directories, 1 file 

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд▓реЙрдХ-рдлрд╝рд╛рдЗрд▓ (рдЯреНрд░реА рдХреЗ рдмрд╣реБрдд рдиреАрдЪреЗ) рдЕрднреА рднреА рдЦрд╛рд▓реА рд╣реИред


go.mod рдлрд╝рд╛рдЗрд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде ~/hello go.mod рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреА:


 module github.com/rumyantseva/hello go 1.13 

рдпрд╣ go.mod рдХрд┐ рдореЗрд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдмрд╛рдж рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рдПрдЧреАред


рдЕрдм рдПрдХ рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЖрд╡реЗрджрди рд▓рд┐рдЦреЗрдВред ~/hello рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, рдореИрдВ main.go рдлрд╝рд╛рдЗрд▓ main.go рдФрд░ main.go рдирд┐рдореНрди рдХреЛрдб рд▓рд┐рдЦрддрд╛ main.go :


 package main import ( "github.com/sirupsen/logrus" ) func main() { logrus.Info("Hello, world!") } 

рдмреЗрд╢рдХ "рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛!" рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ рдЖрдк рд▓реЙрдЧрд░рд╕ рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреА рдХрд┐ рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдлрд╛рдЗрд▓реЗрдВ рдХрд╣рд╛рдБ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВред


рдореИрдВ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реВрдВ:


 $ go run main.go go: finding github.com/sirupsen/logrus v1.4.2 go: downloading github.com/sirupsen/logrus v1.4.2 go: extracting github.com/sirupsen/logrus v1.4.2 go: downloading golang.org/x/sys v0.0.0-20190422165155-953cdadca894 go: extracting golang.org/x/sys v0.0.0-20190422165155-953cdadca894 go: finding golang.org/x/sys v0.0.0-20190422165155-953cdadca894 INFO[0000] Hello, world! 

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд▓реЙрдиреНрдЪ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, go mod рдЯреВрд▓ рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдореЗрд░реЗ рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛ github.com/sirupsen/logrus рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛, рдЗрд╕рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг v1.4.2 рд▓рд┐рдпрд╛ рдФрд░ рдкрд╛рд░рдЧрдорди рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛ рдЧрдпрд╛ред


рдПрдХ рд▓рд╛рдЗрди рдХреЛ go.mod рдлрд╝рд╛рдЗрд▓ рдореЗрдВ go.mod рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛:


 module github.com/rumyantseva/hello go 1.13 require github.com/sirupsen/logrus v1.4.2 // indirect 

go.sum рдлрд╝рд╛рдЗрд▓ рднреА рджрд┐рдЦрд╛рдИ рджреА, рдЬрд┐рд╕рдореЗрдВ, logrus рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╣реИрд╢ рдХреЗ рдЕрд▓рд╛рд╡рд╛, logrus рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╣реИрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ:


 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 

рдирд┐рд░реНрднрд░рддрд╛ рдХреЛрдб рд╕реНрд╡рдпрдВ рдХрд╣рд╛рдВ рд╣реИ? рдпрд╣ ~/go/pkg/mod рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреЗрдХрд╕рдо рдФрд░ рдЕрдиреНрдп рдУрд╡рд░рд╣реЗрдб рдЬрд╛рдирдХрд╛рд░реА ~/go/pkg рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рдПрдЧреАред


рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА go get рдЯреВрд▓ рдореЗрдВ рдЖ рдЧрдП go get , рддреЛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЦреАрдВрдЪрддреЗ рд╕рдордп, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, git clone рд╕рд╛рде)ред рд▓реЗрдХрд┐рди go mod рдЙрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред go mod рдХреЛрдб go mod рдореБрдЦреНрдп рдЗрдХрд╛рдИ рдореЙрдбреНрдпреВрд▓ рд╣реИред рдореЙрдбреНрдпреВрд▓ рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рд╣реИрдВред go mod рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ (рдпрджрд┐ рдЖрдкрдиреЗ go mod download рдХрдорд╛рдВрдб GOPROXY ) рдпрд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд (рдпрджрд┐ рдЖрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ) GOPROXY рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ GOPROXY рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЧреЛ 1.13 рдореЗрдВ рдкреНрд░реЙрдХреНрд╕реА рдХреИрд╕реЗ рд╕реЗрдЯ рд╣реИ:


 $ go env GOPROXY https://proxy.golang.org,direct 

рддреЛ, рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдЬрдм рдореЗрд░реЗ "рд╣реИрд▓реЛ, рд╡рд░реНрд▓реНрдб!" xy.golang.org рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдЗрд╕ рдЪрд░ рдХреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдПрдХ рдЕрд▓рдЧ рднрдВрдбрд╛рд░ рдХреЛ рдЪреБрдирдХрд░ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдкрдиреА рдЦреБрдж рдХреА рдЖрдВрддрд░рд┐рдХ рдкреНрд░реЙрдХреНрд╕реА рдХрдВрдкрдиреА рдХреЛ рддреИрдирд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдХреЛрдб рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЕрдЧрд░ рдореИрдВ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЧреЛ рдореЙрдбреНрдпреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореБрдЭреЗ GOPATH рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдкрддрд╛ рдирд╣реАрдВ GOPATH ред рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ Go рдЕрдкрдиреЗ рдЖрдк рд╣реА ~/go Go рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдмрдирд╛ рд▓реЗрдЧрд╛ред


GOPATH рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрдм рд╣реИ?


рдпрджрд┐ рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ рдЧреЛ рдореЙрдбреНрдпреВрд▓ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рд░рд╛рд╕рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ GOPATH рд╕рд╛рде рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░реНрдп рд╕реЗ рджреВрд░ рд╣реЛрдирд╛ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред


рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛, рдЕрдЧрд░ рдореИрдВ go mod рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реВрдВ, рддреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ ~/hello/go.mod рдФрд░ ~/hello/go.sum ред рдореИрдВ рдЙрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП ~/go рд╣рдЯрд╛ рджреВрдВрдЧрд╛ рдЬреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рдерд╛:


 rm -rf ~/go ~/hello/go.mod ~/hello/go.sum 

рдХреЗрд╡рд▓ main.go рдлрд╝рд╛рдЗрд▓ ~/hello main.go рдореЗрдВ рдмрдиреА рд╣реБрдИ рд╣реИред рдЕрдм рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ go run рд╕рд╛рде рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВ?


 $ go run main.go main.go:4:2: cannot find package "github.com/sirupsen/logrus" in any of: /usr/lib/go-1.13/src/github.com/sirupsen/logrus (from $GOROOT) /home/elena/go/src/github.com/sirupsen/logrus (from $GOPATH) 

рдпрд╣рд╛рдБ рд╡реЗ рд╣реИрдВ, рдпреЗ рдбрд░рд╛рд╡рдиреЗ GOROOT рдФрд░ GOPATH :)


рдЖрд╡реЗрджрди рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ GOPATH рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ go get рд╕рд╛рде рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ:


 $ go get -v github.com/sirupsen/logrus github.com/sirupsen/logrus (download) created GOPATH=/home/elena/go; see 'go help gopath' get "golang.org/x/sys/unix": found meta tag get.metaImport{Prefix:"golang.org/x/sys", VCS:"git", RepoRoot:"https://go.googlesource.com/sys"} at //golang.org/x/sys/unix?go-get=1 get "golang.org/x/sys/unix": verifying non-authoritative meta tag golang.org/x/sys (download) golang.org/x/sys/unix github.com/sirupsen/logrus 

рдХреНрдпрд╛ рд╣реБрдЖ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, go get ~/go рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ ( GOPATH рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ) рдмрдирд╛рдпрд╛ред рдлрд┐рд░ рдирд┐рд░реНрднрд░рддрд╛ рд╡рд╛рд▓реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рд╣реБрдИред рдпрд╣ рдЕрдЬреАрдм рдмрд╛рдд рд╣реИ рдХрд┐ рдХреНрд▓реЛрдирд┐рдВрдЧ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЬрдм рд╣рдо go mod рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП go mod рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рдХрд▓реНрдк рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рдзреАрдорд╛ рджрд┐рдЦрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдирд┐рд░реНрднрд░рддрд╛ рдХреЛрдб рдЕрдм ~/go/src/ рдЕрдВрджрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рд╡реИрд╕реЗ, рдореЗрд░реЗ рд╕реНрд╡рдЪреНрдЫ рдЙрдмрдВрдЯреВ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдкрд░ рдЕрднреА рднреА рдХреЛрдИ рдЧрд┐рдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рдирд╣реАрдВ рдерд╛, рдФрд░ рдХрд╛рдо рдкрд░ go get рдореБрдЭреЗ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдерд╛ред


рдореИрдВрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛:


 $ go run main.go INFO[0000] Hello, world! 

рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!


рдпрд╣ рд╕рд┐рд░реНрдл рдЖрд╡реЗрджрди рдХреЗ рд╕реНрддрд░ рдкрд░ рд╣реИ, рдореИрдВ рдЕрдм рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЯреНрд░реИрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐, рдХрд┐рд╕реА рднреЗрджреНрдпрддрд╛ рдХреЗ рдХрд╛рд░рдг, рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ github.com/sirupsen/logrus рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╡рд╣ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА, рд▓реЗрдХрд┐рди рдХреБрдЫ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб? рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ, рдореБрдЭреЗ рдЕрднреА рднреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЧреЛ рдореЙрдбреНрдпреВрд▓ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреБрдЫ рдФрд░ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ ...


рдирд┐рд╖реНрдХрд░реНрд╖


рдЗрд╕ рд▓реЗрдЦ рдиреЗ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛, рдФрд░ рдЧреЛ рдореЗрдВ рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЕрднреА рднреА рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рд╡рд╛рд▓ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЧреЛ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХрдо рд╕реЗ рдХрдо рдЙрди рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рдирд╣реАрдВ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдХрд╛рд░реНрдпрд╢реАрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред


рдпрджрд┐ рдЖрдк рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЧреЛ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ! рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд░рд╛рдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рд▓реМрдЯрдиреЗ рд╕реЗ рд╣реА рдХреБрдЫ рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИред рд╡реИрд╕реЗ, рдпрджрд┐ рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрджрд░ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЧреЛ рдореЙрдбреНрдпреВрд▓ рд╡рд┐рдХреНрд░реЗрддрд╛ рдореЛрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред


рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЖрдк рдЗрд╕реЗ рдЧреЛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рддрдмреНрджреАрд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЗрд╕рдХреА рддреИрдирд╛рддреА рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрди рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрджрд┐ рдирдП рд▓реЛрдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдкреБрд░рд╛рдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЕрдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рддреЛ рдЙрдирдХреЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рд╕рднреА рджрд╕реНрддрд╛рд╡реЗрдЬ рдЬрдЧрд╣ рдкрд░ рд╣реЛрдВред


рд╡реИрд╕реЗ, 7 рдЕрдХреНрдЯреВрдмрд░ рдХреЛ рдЧреЛрд▓рдВрдЧрдХреЙрдиреНрдл рд╕рдореНрдореЗрд▓рди рдореЗрдВ, рд╡рд┐рд╢реЗрд╖ рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдПрдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдХреНрд╖реЗрддреНрд░ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдХреЛрдИ рднреА рд╕рдореНрдореЗрд▓рди рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдорд┐рддрд┐ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдФрд░ рд░реВрд╕реА рдЧреЛ-рд╕рдореБрджрд╛рдп рдХреЗ рдЙрддреНрд╕рд╛рд╣реА рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рднреА рдкреНрд░рд╢реНрди рдкреВрдЫ рд╕рдХрддрд╛ рд╣реИред рдЬрд╛рдУ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ? рд╡реНрдпрд╕рдиреЛрдВ рд╕реЗ рдирд┐рдкрдЯреЗрдВ? рдорд╛рдЗрдХреНрд░реЛрд╕реЗрд╡рд╛ рд▓рд┐рдЦрд┐рдП? рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╣реИ!

Source: https://habr.com/ru/post/hi467697/


All Articles