Go: рдкреНрд░рд╕реНрддрд╛рд╡: cmd/go: рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдореЗрдВ рд╕реНрдерд┐рд░ рд╕рдВрдкрддреНрддрд┐ (рдлрд╝рд╛рдЗрд▓реЗрдВ) рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди

рдХреЛ рдирд┐рд░реНрдорд┐рдд 4 рджрд┐рд╕ре░ 2019  ┬╖  176рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: golang/go

рд╕реНрдерд┐рд░ рд╕рдВрдкрддреНрддрд┐ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрдкрдХрд░рдг рд╣реИрдВ:

рджрд░рдЕрд╕рд▓, https://tech.townsourced.com/post/embedding-static-files-in-go/ рдФрд░ рд╕реВрдЪрд┐рдпрд╛рдВ:

рдкреНрд░рд╕реНрддрд╛рд╡

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрд╛рд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд░рдиреЗ рдФрд░ рджреЛрд╣рд░рд╛рд╡ рдХреЛ рдХрдо рдХрд░рдиреЗ, рдлрд╝рд╛рдЗрд▓ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ cmd/go рдЯреВрд▓ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред

рдореМрдЬреВрджрд╛ рд╣рд╛рд▓рд╛рдд рд╕реЗ рдкрд░реЗрд╢рд╛рдиреА :

  • рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрдкрдХрд░рдг рд╣реИрдВ
  • рдЧреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛: рдЬрдирд░реЗрдЯ-рдЖрдзрд╛рд░рд┐рдд рд╕рдорд╛рдзрд╛рди рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреА рджреВрд╕рд░реА (рдФрд░ рдереЛрдбрд╝реА рдмрдбрд╝реА) рдкреНрд░рддрд┐ рдХреЗ рд╕рд╛рде рдЧрд┐рдЯ рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рдлреБрд▓рд╛рддрд╛ рд╣реИред
  • рдЧреЛ: рдЬрдирд░реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реИ go install -рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдирд╛ рдпрд╛ рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдкрдиреА рдореЗрдХрдлрд╛рдЗрд▓реНрд╕ рд▓рд┐рдЦрдирд╛ рдЖрджрд┐ред

рд▓рдХреНрд╖реНрдп:

  • рдЬреЗрдирд░реЗрдЯ рдХреА рдЧрдИ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЪреЗрдХ рдЗрди рди рдХрд░реЗрдВ
  • *.go рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЙрддреНрдкрдиреНрди рди рдХрд░реЗрдВ (рдХрдо рд╕реЗ рдХрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдирд╣реАрдВ)
  • go install / go build рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд░реЗрдВ
  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рддрд┐ рдлрд╝рд╛рдЗрд▓/рдЧреНрд▓реЛрдм рдЪреБрдирдиреЗ рджреЗрдВ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬреИрд╕реЗ []рдмрд╛рдЗрдЯ, func() io.Reader , io.ReaderAt , рдЖрджрд┐)
  • рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЬрд╣рд╛рдВ рдЙрдкрдпреБрдХреНрдд рд╣реЛ, рдмрд╛рдЗрдирд░реА рдореЗрдВ рд╕рдВрдкреАрдбрд╝рд┐рдд рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреЗрд╡рд▓ io.Reader )? ( рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ : рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдирд╣реАрдВ; рдиреАрдЪреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рджреЗрдЦреЗрдВ)
  • рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдХреЛрдИ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдирд╣реАрдВ ; рдпрд╣ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЪрд▓реА рдЖ рд░рд╣реА рдЧреЛ рдиреАрддрд┐ рд╣реИред go build рдпрд╛ go install рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдХреЛрдб рдирд╣реАрдВ рдЪрд▓рд╛ рд╕рдХрддрд╛, рдЬреИрд╕реЗ go:generate рдЗрдВрд╕реНрдЯреЙрд▓ рд╕рдордп рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдЪрд▓рддрд╛ рд╣реИред

рджреЛ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреГрд╖реНрдЯрд┐рдХреЛрдг //go:embed Logo logo.jpg рдпрд╛ рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рдкреИрдХреЗрдЬ ( var Logo = embed.File("logo.jpg") ) рд╣реИрдВред

рдЬрд╛рдУ: рдПрдореНрдмреЗрдб рджреГрд╖реНрдЯрд┐рдХреЛрдг

go:embed рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП, рдХреЛрдИ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА go/build -рдЪрдпрдирд┐рдд *.go рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

//go:embed Logo logo.jpg

рдЬреЛ, рдХрд╣рддреЗ рд╣реИрдВ, рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ:

func Logo() *io.SectionReader

( io рдкреИрдХреЗрдЬ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝рдирд╛)

рдпрд╛:

//go:embedglob Assets assets/*.css assets/*.js

рд╕рдВрдХрд▓рди рдХрд░рдирд╛, рдХрд╣рдирд╛:

var Assets interface{
     Files() []string
     Open func(name string) *io.SectionReader
} = runtime.EmbedAsset(123)

рдЬрд╛рд╣рд┐рд░ рд╣реИ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд▓рд╛ рд╣реИред рд╕рдВрдкреАрдбрд╝рд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдХреБрдЫ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХреЗрд╡рд▓ io.Reader рдЙрддреНрдкрдиреНрди рдХрд░реЗред

рдПрдореНрдмреЗрдб рдкреИрдХреЗрдЬ рджреГрд╖реНрдЯрд┐рдХреЛрдг

рдЕрдиреНрдп рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ рдЬрд╛рджреВ //go:embed рд╕рд┐рдВрдЯреИрдХреНрд╕ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХреБрдЫ рдирдП "embed" рдпрд╛ "golang.org/x/foo/embed" рдкреИрдХреЗрдЬ рдореЗрдВ рдЧреЛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рджреЗрдВ:

var Static = embed.Dir("static")
var Logo = embed.File("images/logo.jpg")
var Words = embed.CompressedReader("dict/words")

рдлрд┐рд░ cmd/go рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЛ рдкрд╣рдЪрд╛рдиреЗрдВред Foo("foo/*.js") рдЖрджрд┐ рдФрд░ рдЧреНрд▓реЛрдм рд░рдирдЯрд╛рдЗрдо рдХреЗ рдмрдЬрд╛рдп cmd/go рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдмрд┐рд▓реНрдб рдЯреИрдЧ рдпрд╛ рдЭрдВрдбреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдВред рдкрд░рдХреАрдк (рдКрдкрд░ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдореЗрдВ рдПрдХ рдРрд╕реА рд╡рд┐рдзрд╛ рд╣реИ, рдЬреЛ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рдПрдХ рдмрдбрд╝реЗ рдмрд╛рдЗрдирд░реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдЪрд┐рдВрддрд╛рдУрдВ

  • рдПрдХ рд╢реИрд▓реА рдЪреБрдиреЗрдВ (//go:embed* рдмрдирд╛рдо рдПрдХ рдЬрд╛рджреВ рдкреИрдХреЗрдЬ)ред
  • рдХреБрдЫ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░реЗрдВ?

    • рд╕рдВрднрд╡рддрдГ ../../../../../../../../../../etc/shadow рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рдЕрд╡рд░реБрджреНрдз рдХрд░реЗрдВ

    • рд╢рд╛рдпрдж .git рднреА рдкрд╣реБрдВрдЪрдирд╛ рдЕрд╡рд░реБрджреНрдз рдХрд░реЗрдВ

Proposal Proposal-Hold

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@robpike рдФрд░ рдореИрдВрдиреЗ рдЗрд╕ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рдд рдХреА рдереА (рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдХреЛрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдереА) рдФрд░ рдХрднреА рднреА рдХреБрдЫ рднреА рдХрд░рдиреЗ рд╕реЗ рдкреАрдЫреЗ рдирд╣реАрдВ

рдореИрдВ "рд╕рдВрдкреАрдбрд╝рд┐рдд рдмрдирд╛рдо рдирд╣реАрдВ" рдШреБрдВрдбреА рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реВрдВред рдЕрдЧрд░ рд╣рдо рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓реЛрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХрд┐рд╕ рд╕рдВрдкреАрдбрд╝рди, рд╕рдВрдкреАрдбрд╝рди рд╕реНрддрд░ рдЖрджрд┐ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдЬреЛрдбрд╝реЗрдВред рд╣рдореЗрдВ рдХреЗрд╡рд▓ рд╕рд╛рджреЗ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдкреАрдбрд╝рд┐рдд рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдмрдврд╝рд┐рдпрд╛, рд╡рд┐рд╡рд░рдг рдЙрдирдХреЗ рдКрдкрд░ рд╣реИ рдФрд░ рдЧреЛ рдХреА рдУрд░ рд╕реЗ рдХрд┐рд╕реА рдПрдкреАрдЖрдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рд╕рднреА 176 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ embedglob рдХреЛ рдПрдХ рдкреВрд░реНрдг рдлрд╝рд╛рдЗрд▓ рдЯреНрд░реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╢рд╛рдпрдж рдХреБрдЫ рдпреВрдирд┐рдХреНрд╕ рд╢реЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд ** рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред

рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЛ http.FileServer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ HTTP рдХреЗ рд╕рд╛рде рдПрдореНрдмреЗрдбреЗрдб рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдпрд╛ рддреЛ mjibson/esc (рдЬреЛ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдпрд╛ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдореЗрд░реА рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛ рдЕрджреНрд╡рд┐рддреАрдп рдкрде рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓рддрд╛ рд╣реИ рдФрд░ рдореВрд▓ рдкрде рд╕реЗ рдирдП рдкрдереЛрдВ рдореЗрдВ рдПрдХ рдирдХреНрд╢рд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬреИрд╕реЗ "/js/bootstrap.min.js": "/js/bootstrap.min.827ccb0eea8a706c4c34a16891f84e7b.js" ред рдлрд┐рд░ рдЖрдк рдЗрд╕ рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: href="{{ static_path "/css/bootstrap.min.css" }}" ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдПрдХ рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЧреИрд░-рддреБрдЪреНрдЫ рд╣реЛрдЧрд╛ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реА рдлрд╛рдЗрд▓реЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред

//go:embed рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬрдЯрд┐рд▓рддрд╛ рдХрд╛ рдПрдХ рдФрд░ рд╕реНрддрд░ рднреА рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред рдХреЛрдб рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЬрд╛рджреБрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред "рдПрдореНрдмреЗрдб рдкреИрдХреЗрдЬ" рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдорд┐рддреНрд░рд╡рдд рд▓рдЧрддрд╛ рд╣реИред

(рдпрд╣рд╛рдБ рдмрд╕ рдЬрд╝реЛрд░ рд╕реЗ рдмреЛрд▓ рд░рд╣рд╛ рд╣реВрдБред)

@рдУрдкреЗрдиреЛрдЯрд╛ ,

http.FileServer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ HTTP рдХреЗ рд╕рд╛рде рдПрдореНрдмреЗрдбреЗрдб рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рд╣рд╛рдВ, рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдкрд╣рд▓рд╛ рд▓рд┐рдВрдХ рдПрдХ рдкреИрдХреЗрдЬ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рдерд╛ ( 2011 рдореЗрдВ, рдЧреЛ 1 рд╕реЗ рдкрд╣рд▓реЗ ) рдФрд░ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ http.FileServer: https://godoc.org/perkeep.org/pkg/fileembed#Files.Open рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

@рд╕реЗрд╕реНрдкрд╛рд░реЗ ,

// рдЧреЛ: рдПрдореНрдмреЗрдб рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬрдЯрд┐рд▓рддрд╛ рдХрд╛ рдПрдХ рдФрд░ рд╕реНрддрд░ рднреА рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред рдХреЛрдб рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЬрд╛рджреБрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред "рдПрдореНрдмреЗрдб рдкреИрдХреЗрдЬ" рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдорд┐рддреНрд░рд╡рдд рд▓рдЧрддрд╛ рд╣реИред

рд╣рд╛рдБ, рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБред рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмрд╣реБрдд рдордЬрдмреВрдд рддрд░реНрдХ рд╣реИред рдпрд╣ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдпреЛрдЧреНрдп рдмрдирд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕реЗ cmd/go рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рдХреЗ рдмрдЬрд╛рдп рдирд┐рдпрдорд┐рдд рдЧреЛрдбреЛрдХ рдХреЗ рд╕рд╛рде рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@bradfitz - рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ https://github.com/golang/go/issues/3035 рдмрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

@agnivade ,

рдпрджрд┐ рд╣рдо рдореИрдЬрд┐рдХ рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирдПрдХреНрд╕рдкреЛрд░реНрдЯреЗрдб рдЯрд╛рдЗрдк рдЯреНрд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЙрд▓рд░реНрд╕ рдХрдВрдкрд╛рдЗрд▓-рдЯрд╛рдЗрдо рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯ рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ :

(рдпрд╣рд╛рдБ рд╕рдВрджрд░реНрднрд┐рдд рд░рдгрдиреАрддрд┐ рд╣реИ: https://groups.google.com/forum/#!topic/golang-nuts/RDA9Hag8RZw/discussion)

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЪрд┐рдВрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдЗрдирд╡рд┐рдЬреБрдЕрд▓ рдпрд╛ рд╕рднреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛ рдФрд░ рдХреНрдпрд╛ рдореЗрдореЛрд░реА рдлрд╝реБрдЯрдкреНрд░рд┐рдВрдЯ рдмрдирд╛рдо рдореЗрдореЛрд░реА рдлрд╝реБрдЯрдкреНрд░рд┐рдВрдЯ рдпрд╛ рдХреБрдЫ рдордзреНрдп рдЧреНрд░рд╛рдЙрдВрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдпрдж рдПрдХ рдмрд┐рд▓реНрдб рдЯреИрдЧ рдпрд╛ рдкреНрд░рддрд┐ рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕реЗрд╕ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛ред

рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВрдиреЗ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ (рдмреЗрд╢рдХ рдореЗрд░рд╛ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рд╣реИ :)) рдПрдХ http.FileSystem рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИ рдЬреЛ рд╕рднреА рдПрдореНрдмреЗрдбреЗрдб рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣, рдЖрдк рдЯрд╛рдЗрдкрдЪреЗрдХрд░ рдХреЛ рдЦреБрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рджреБрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ http рджреНрд╡рд╛рд░рд╛ рдкрд░реЛрд╕рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреЛрдб рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рд╡рд┐рдХрд╛рд╕ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ (http.Dir) рдХреЗ рд▓рд┐рдП рдлрд╝реЙрд▓рдмреИрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рдлреА рдмрд╣реБрдореБрдЦреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ http.FileSystem рди рдХреЗрд╡рд▓ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ, рдмрд▓реНрдХрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдореЗрдВ рднреА рдХрд╛рдлреА рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред

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

@AlexRouSg рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗрд╡рд▓ рдЙрди рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ рдЬреЛ рд╕реАрдзреЗ рдЕрдВрддрд┐рдо рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИрдВред рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЙрдкрдХрд░рдг рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ; рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред

@ianlancetaylor , рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @AlexRouSg рдЬреЛ рдЕрдВрддрд░ рдмрдирд╛ рд░рд╣рд╛ рдерд╛, рд╡рд╣ рд╡реИрд╢реНрд╡рд┐рдХ []byte s (рдЕрдирдкреЗрдЬреЗрдмрд▓, рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рдореЗрдореЛрд░реА) рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдмреАрдЪ рдерд╛, рдЬреЛ рдПрдХ рдИрдПрд▓рдПрдл рд╕реЗрдХреНрд╢рди рдХрд╛ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ, рдСрди-рдбрд┐рдорд╛рдВрдб рд╡реНрдпреВ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдерд╛ред рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдбрд┐рд╕реНрдХ рдкрд░ (рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ) рдХреЛ рд▓рд╛рдЗрд╡, рдПрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреА рддрд░рд╣ Open рдХреЙрд▓ рдХрд┐ рд░рд┐рдЯрд░реНрди рдПрдХ *io.SectionReader ред (рдореИрдВ http.File рдпрд╛ http.FileSystem рдореЗрдВ cmd/go рдпрд╛ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдмреЗрдХ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛... net/http рдПрдХ рдПрдбреЗрдкреНрдЯрд░ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред)

@bradfitz рджреЛрдиреЛрдВ http.File рд╣реА рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬрд┐рд╕рдореЗрдВ http рдкреИрдХреЗрдЬ рдкрд░ рдХреЛрдИ рддрдХрдиреАрдХреА рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рд╣реИред рдХрд┐рд╕реА рднреА Open рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЙрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Stat рдФрд░ Readdir рджреЛрдиреЛрдВ рд╣реА рдРрд╕реА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЙрдкрдпреЛрдЧреА рд╣реИрдВред

@urandom , рд╣рд╛рд▓рд╛рдВрдХрд┐, "http.File" рдирд╛рдо (https://play.golang.org/p/-r3KjG1Gp-8) рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдП рдмрд┐рдирд╛, рдпрд╣ http.FileSystem рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред

@robpike рдФрд░ рдореИрдВрдиреЗ рдЗрд╕ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рдд рдХреА рдереА (рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдХреЛрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдереА) рдФрд░ рдХрднреА рднреА рдХреБрдЫ рднреА рдХрд░рдиреЗ рд╕реЗ рдкреАрдЫреЗ рдирд╣реАрдВ

рдореИрдВ "рд╕рдВрдкреАрдбрд╝рд┐рдд рдмрдирд╛рдо рдирд╣реАрдВ" рдШреБрдВрдбреА рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реВрдВред рдЕрдЧрд░ рд╣рдо рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓реЛрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХрд┐рд╕ рд╕рдВрдкреАрдбрд╝рди, рд╕рдВрдкреАрдбрд╝рди рд╕реНрддрд░ рдЖрджрд┐ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдЬреЛрдбрд╝реЗрдВред рд╣рдореЗрдВ рдХреЗрд╡рд▓ рд╕рд╛рджреЗ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдкреАрдбрд╝рд┐рдд рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдмрдврд╝рд┐рдпрд╛, рд╡рд┐рд╡рд░рдг рдЙрдирдХреЗ рдКрдкрд░ рд╣реИ рдФрд░ рдЧреЛ рдХреА рдУрд░ рд╕реЗ рдХрд┐рд╕реА рдПрдкреАрдЖрдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдПрдХ рдпреБрдЧрд▓ рд╡рд┐рдЪрд╛рд░:

  • рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд╣рд░ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрдм рд╣рдо рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓реЗрдВ рдореЙрдбреНрдпреВрд▓ рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдорддрд▓рдм рдХреЛрдИ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд▓рд┐рдВрдХ, рдХреЗрд╕ рд╡рд┐рд░реЛрдз рдЖрджрд┐ рднреА рдирд╣реАрдВ рд╣реИред рд╣рдо рдЙрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдмрд┐рдирд╛ рд░рдХрдо рдХреЛ рддреЛрдбрд╝реЗ рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИред
  • рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХреЛ рдЙрд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ (рдпрджрд┐ //go:embed рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдпрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ (рдпрджрд┐ static рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЗрд╕рд╕реЗ рд╕рдВрдХреБрд▓ рдФрд░ рдПрдореНрдмреЗрдбреЗрдб рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдХреЛ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдХрд┐рд╕реА рднреА рддрд░рд╣, рдпрд╣ /etc/shadow рдпрд╛ .git рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред рди рддреЛ рдореЙрдбреНрдпреВрд▓ рдЬрд╝рд┐рдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рдЧреЛ рдХрдорд╛рдВрдб рдХреЗ рджрд╛рдпрд░реЗ рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реВрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╢рд╛рдпрдж рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рдорд╛рдзрд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ go_embed_data рдФрд░ go-bindata (рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХрдИ рдХрд╛рдВрдЯреЗ рд╣реИрдВ) рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реВрдВ, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрди рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреНрдпрд╛ рдРрд╕реА рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдиреНрдп рд▓реЛрдЧ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ?

рдХреБрдЫ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк static рдпрд╛ embed рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╕рд┐рдореНрд▓рд┐рдВрдХ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд╣рд░ рдХреБрдЫ рднреА рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛, рдпрджрд┐ рдЖрдк GOPATH рдкрд░ рд╣реИрдВ, рддреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЬ рдХреЗ рдмрд╛рд╣рд░ред

рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реВрдВ рдЬреЛ рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЫрджреНрдо рдкреИрдХреЗрдЬ рднреА рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рд╕рдВрдХрд▓рди рдХреЛ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА embed рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдШреЛрд╖рдгрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрд╛рд╖рд╛ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд╣реЛред рдпрд╣ import рд╕рдорд╛рди рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рд╕реНрдерд╛рдиреАрдп рдкрдереЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,

embed ui "./ui/build"

func main() {
  file, err := ui.Open("version.txt")
  if err != nil {
    panic(err)
  }
  version, err = ioutil.ReadAll(file)
  if err != nil {
    panic(err)
  }
  file.Close()

  log.Printf("UI Version: %s\n", bytes.TrimSpace(version))
  http.ListenAndServe(":8080", http.EmbeddedDir(ui))
}

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЖрдкрдиреЗ рдореБрдЭреЗ рдЗрд╕реЗ рд╣рд░рд╛ рджрд┐рдпрд╛, @jayconrodред

https://github.com/golang/go/issues/35950#issuecomment -561703346 рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдЬрд╛рдЧрд░ рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкрд╣реЗрд▓реА рд╣реИред рдбреЗрдЯрд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХреЗ рд╣реИрдВ []byte , string , рдФрд░ Read -ish рдЗрдВрдЯрд░рдлреЗрд╕ред

рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдПрдореНрдмреЗрдбреЗрдб рдбреЗрдЯрд╛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реЛред рд╣рд╛рд▓рд╛рдВрдХрд┐, []byte (рдЬрд┐рд╕рдореЗрдВ io.Reader , io.SectionReader , рдЖрджрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ) рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдпрд╛ рддреЛ (1) рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, (2) рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ, рдпрд╛ (3) []byte рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реЛред рдбреЗрдЯрд╛ рдХреЛ string s рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рд╕реЗ рдпрд╣ рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдПрдкреАрдЖрдИ рдХреА рдХреАрдордд рдкрд░ рдЬрд┐рд╕реЗ рдЕрдХреНрд╕рд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдЬреЛ рдПрдореНрдмреЗрдбреЗрдб рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЕрдВрддрддрдГ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдмрд╛рдЗрдЯ рд╕реНрд▓рд╛рдЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдореИрдВ рдорд╛рд░реНрдЧ (3) рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛: []byte рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реЛред рдЖрдк рдмреИрдХрд┐рдВрдЧ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕рд╕реНрддреЗ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ []byte рдФрд░ string рдХреЗ рд╕рдорд╛рди рдбреЗрдЯрд╛ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ; рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╕рдВрдХрд▓рдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛ рдХрд╛ рд▓рд╛рдн рдирд╣реАрдВ рдЙрдард╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдЯреВрд▓рдЪреЗрди рд╕рдорд░реНрдерди рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд▓рд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ) рдореМрдЬреВрджрд╛ рдХреЛрдбрдЬрди рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

(рдПрдХ рддреГрддреАрдп рдкрдХреНрд╖ рдХреЛрдбрдЬрди рдкреИрдХреЗрдЬ DATA рдкреНрд░рддреАрдХреЛрдВ рд╡рд╛рд▓реА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╕реЗрдВрдмрд▓реА рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрди рдкреНрд░рддреАрдХреЛрдВ рдХреЛ string рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЫреЛрдЯреА рдЖрд░реНрдХ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрд╕реЗрдВрдмрд▓реА рдлрд╝рд╛рдЗрд▓реЗрдВ s рдФрд░ []byte sред рдореИрдВрдиреЗ CL резремрейренрекрен рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рд▓рд┐рдЦрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдХреЛрдбрдЬрди рдкреИрдХреЗрдЬ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ред)

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред io.Reader рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рдкреВрд░реА рдмрд╛рдд рд╣реИред рдЬрдм рдЖрдк Read(buf) рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдбреЗрдЯрд╛ рдХреЛ _you_ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдмрдлрд╝рд░ рдореЗрдВ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИред рдмрджрд▓ рд░рд╣рд╛ рд╣реИ buf рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗ рдЖрдВрддрд░рд┐рдХ рднрд╛рдЧреЛрдВ рдкрд░ рд╢реВрдиреНрдп рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИ io.Reader ред

рдореИрдВ @DeedleFake рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдореИрдВ рдЬрд╛рджреВ []byte рд╕рд░рдгреА рдмреИрдХрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдЧреЗрдо рдирд╣реАрдВ рдЦреЗрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдмрд╛рдЗрдирд░реА рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрддреНрдд рдмрдлрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛ рдареАрдХ рд╣реИред

рдпрд╣рд╛рдВ рдмрд╕ рдПрдХ рдФрд░ рд╢рд┐рдХрди - рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬреЛ рдбреАрдЯреАреНрд░реЗрд╕ рд╕реНрд░реЛрдд рдХреЛрдб (рдПрдореНрдмреЗрдбреЗрдб) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдпрд╣ \n рдФрд░ \r\n рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИред (рд╣рдо рддрд░реНрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдбреАрдЯреАреНрд░реЗрд╕ рдореЗрдВ рдПрдХ рдЧреВрдВрдЧрд╛ рдмрд╛рдд рд╣реИ рдпрд╛ рдирд╣реАрдВ - рдпрд╣ рдмрд┐рдВрджреБ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╣реИ рдФрд░ рдЖрдЬ рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИред)

рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рдмреИрдХрдЯрд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рджреЛрдиреЛрдВ рдХреЛ \ n рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рд╕реНрд░реЛрдд рдореЗрдВ рдХреИрд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдореИрдВ рдбреАрдЯреАреНрд░реЗрд╕ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреЛ-рдЬреЗрдирд░реЗрдЯ рдХреЗ рд╕рд╛рде рдЗрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВред

рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЧреЛ рдХрдорд╛рдВрдб рдореЗрдВ рдПрдХ рдПрдореНрдмреЗрдб рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реА рдЧрдИ рд╣реИ, рддреЛ рдореИрдВ рдзреАрд░реЗ рд╕реЗ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдХрд┐ рд╕реАрдЖрд░/рд╕реАрдЖрд░рдПрд▓рдПрдл рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдмрд╣реБрдд рдХрд╛рдо рдЖ рд╕рдХрддреЗ рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓рд╛рдЗрди рд╕рдорд╛рдкреНрддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ рдПрдХ рдЧреЛрдЪрд╛ред

рд╕рдВрдкреАрдбрд╝рди рдХреА рддрд░рд╣, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдлрд╝рд╛рдЗрд▓ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдмрд╛рдЗрдирд░реА рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ" рдкрд░ рд░реБрдХрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╕реАрдЖрд░/рд╕реАрдЖрд░рдПрд▓рдПрдл рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг, рдпреВрдирд┐рдХреЛрдб рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг, рдЧреЛрдлрдордЯрд┐рдВрдЧ, рд╡рд╣ рд╕рдм рдЬреЛ рдХрд╣реАрдВ рдФрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рд╕рдЯреАрдХ рдмрд╛рдЗрдЯреНрд╕ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред (рдпрджрд┐ рдЖрдкрдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдЙрдиреНрд╣реЗрдВ рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рдЫреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж gzipped рд╕рд╛рдордЧреНрд░реА рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЙрдиреНрд╣реЗрдВ рдЧрдирдЬрд╝рд┐рдк рдХрд░реЗрдВред) _many_ рдлрд╝рд╛рдЗрд▓ рдордВрдЧрд┐рдВрдЧ рдиреЙрдмреНрд╕ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдЬреЛрдбрд╝рдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП 0 рдкрд░ рд░реБрдХреЗрдВред

рдПрдХ рдирдпрд╛ рдЖрд░рдХреНрд╖рд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╛рдо рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рддрдирд╛ рдореИрдВ рдЪрд╛рд╣реВрдВред
(2014 рдореЗрдВ рдмрд╣реБрдд рджреЗрд░ рдирд╣реАрдВ рд╣реБрдИ рдереА, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдЕрдм рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИред)
рддреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдСрдкреНрдЯ-рдЗрди рдЯрд┐рдкреНрдкрдгреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд░рдирдЯрд╛рдЗрдо рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓реЗрдВред рддрдм рдЖрдк рд▓рд┐рдЦрдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

//go:embed *.html (or static/* etc)
var files runtime.Files

рдФрд░ рдлрд┐рд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЖрдк рдХреЗрд╡рд▓ рдлрд╛рдЗрд▓ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде interface { io.ReadSeeker; io.ReaderAt } рд╡рд╛рдкрд╕ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЛрд▓реЗрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ var рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдкреИрдХреЗрдЬ рджреВрд╕рд░реЗ рдкреИрдХреЗрдЬ рдХреА рдПрдореНрдмреЗрдбреЗрдб рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЧреНрд░рдмрд┐рдВрдЧ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдирд╛рдо рдЯреАрдмреАрдбреА рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддрдВрддреНрд░ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕реЗ рд╕рд░рд▓ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред (рд╕рд░рд▓реАрдХрд░рдг рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!)

рд╣рдо рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕реЗ Bazel рдФрд░ Gazelle рдХреЗ рд╕рд╛рде рднреА рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЧрдЬрд╝реЗрд▓ рдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдкрд╣рдЪрд╛рди рд▓рд┐рдпрд╛ рдФрд░ рдЧреНрд▓рдмреНрд╕ рдХрд╣рддреЗ рд╣реБрдП рдПрдХ рдмреЗрдЬрд╝рд▓ рдирд┐рдпрдо рд▓рд┐рдЦ рджрд┐рдпрд╛, рдФрд░ рдлрд┐рд░ рд╣рдореЗрдВ рдмрд┐рд▓реНрдб рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреВрд▓ (рдЧреЛ рдЯреВрд▓ рдПрдореНрдмреЗрдбрди рдпрд╛ рдЬреЛ рднреА рд╣реЛ) рдХрд╛ рдкрд░реНрджрд╛рдлрд╛рд╢ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдЧреЛ рдХрдорд╛рдВрдб рд╣реЛрдЧрд╛) рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд░реЗрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд╛рдЗрд▓ рдХрднреА рди рджрд┐рдЦрд╛рдПрдВ)ред рдпрд╣ рдХрд╛рдлреА рд╕реАрдзрд╛ рд▓рдЧрддрд╛ рд╣реИред

рдпрджрд┐ рд╡рд┐рднрд┐рдиреНрди рдореВрдВрдЧрд┐рдВрдЧ рдЪрд╛рд▓ рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛, рддреЛ рдпрд╣ рдЗрд╕ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рддрд░реНрдХ рд╣реИред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреЙрдкрд░ рдирд╣реАрдВ рд╣реИ - рдореИрдВ рдЧреЛ рдЬрдирд░реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреИрд╕реЗ рдореИрдВ рдХрд░рддрд╛ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореИрдВ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рд╕реЗ рд▓рд╛рдн рдирд╣реАрдВ рдЙрдард╛ рд╕рдХрддрд╛ред

рдЖрдо рддреМрд░ рдкрд░ рдореВрдВрдЧрд┐рдВрдЧ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ - рдореИрдВ рдПрдХ рдРрд╕реЗ рд╕рдорд╛рдзрд╛рди рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдХреЛрдИ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдПрдХ рддрд░рдл рд░реАрдбрд░ () рдХреА рддрд░рд╣ рдХреБрдЫ, рдФрд░ рджреВрд╕рд░реА рддрд░рдл рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ - рд╢рд╛рдпрдж io.Reader рдХреЗ рд╕рд╛рде рддрддреНрдХрд╛рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╣реА) -- рдЬрд┐рд╕реЗ рдЧреЛ cmd рдмрдирд╛рдПрдЧрд╛ рдФрд░ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреНрд░реАрдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛рдПрдЧрд╛ред рдлрд┐рд░ рд▓реЛрдЧ рдЬреЛ рдЪрд╛рд╣реЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд▓реЛрдЧ рдЕрд░реНрдз-рдорд╛рдирдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗ рдЬреИрд╕реЗ dos2unix рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рд╕рдВрдкреАрдбрд╝рди рдЗрддреНрдпрд╛рджрд┐ред (рд╢рд╛рдпрдж рдЙрдиреНрд╣реЗрдВ рднреА рд╢реНрд░реГрдВрдЦрд▓рд╛рдмрджреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред)

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

рдПрдХ рдирдпрд╛ рдЖрд░рдХреНрд╖рд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╛рдо рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рддрдирд╛ рдореИрдВ рдЪрд╛рд╣реВрдВред [...] рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдСрдкреНрдЯ-рдЗрди рдЯрд┐рдкреНрдкрдгреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдпрджрд┐ рдлрд╝рд╛рдЗрд▓реЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреИрдХреЗрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рд╣реИрдВ, рддреЛ runtime/embed рдХрд╣реЗрдВ, рддреЛ рдЙрд╕ рдкреИрдХреЗрдЬ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдСрдкреНрдЯ-рдЗрди рд╕рд┐рдЧреНрдирд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

io.Read рджреГрд╖реНрдЯрд┐рдХреЛрдг рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ strings.Contains (рдЬреИрд╕реЗ cmd/go/internal/cfg ) рдЬреИрд╕реЗ рдЕрд╡рдзрд╛рд░рдгрд╛рддреНрдордХ-рд╕рд░рд▓ рд░реИрдЦрд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдУрд╡рд░рд╣реЗрдб (рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдФрд░ рд╕реНрдореГрддрд┐ рдкрджрдЪрд┐рд╣реНрди рджреЛрдиреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ) рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ , рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ, template.Parse ред

рдЙрди рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдХреЙрд▓рд░ рдХреЛ рдпрд╣ рдЪреБрдирдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЖрджрд░реНрд╢ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреВрд░реЗ рдмреНрд▓реЙрдм рдХреЛ (рд╕рдВрднрд╡рддрдГ рдореЗрдореЛрд░реА-рдореИрдкреНрдб) string рдпрд╛ io.ReaderAt рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдП рдпрд╛ рдирд╣реАрдВред

рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп runtime.Files рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд▓рдЧрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐: runtime.Files.Open рд╕реЗ рд▓реМрдЯрд╛рдИ рдЧрдИ рдЪреАрдЬрд╝ рдореЗрдВ ReadString() string рд╡рд┐рдзрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рд╕реНрдореГрддрд┐-рдореИрдк рдХрд┐рдП рдЧрдП рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рд▓реМрдЯрд╛рддреА рд╣реИред

рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдСрдкреНрдЯ-рдЗрди рдЯрд┐рдкреНрдкрдгреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддреА рд╣реИред

рд╣рдо рдРрд╕рд╛ go рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде go.mod рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред 1.15 (рдпрд╛ рдЬреЛ рднреА) рд╕реЗ рдкрд╣рд▓реЗ static рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдкреИрдХреЗрдЬ рд╣реЛрдЧрд╛, рдФрд░ 1.15 рдпрд╛ рдЙрдЪреНрдЪрддрд░ рдкрд░ рдЗрд╕рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рд╕рдВрдкрддреНрддрд┐рдпрд╛рдВ рд╣реЛрдВрдЧреАред

(рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ GOPATH рдореЛрдб рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред)

рдореИрдВ "рд╕рдВрдкреАрдбрд╝рд┐рдд рдмрдирд╛рдо рдирд╣реАрдВ" рдШреБрдВрдбреА рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реВрдВред рдЕрдЧрд░ рд╣рдо рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓реЛрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХрд┐рд╕ рд╕рдВрдкреАрдбрд╝рди, рд╕рдВрдкреАрдбрд╝рди рд╕реНрддрд░ рдЖрджрд┐ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдЬреЛрдбрд╝реЗрдВред рд╣рдореЗрдВ рдХреЗрд╡рд▓ рд╕рд╛рджреЗ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЬрдмрдХрд┐ рдореИрдВ рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдпрд╛рди рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рд╣рдореЗрдВ рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

https://tech.townsourced.com/post/embedding-static-files-in-go/#comparison рд╕рдкреЛрд░реНрдЯ рдХрдВрдкреНрд░реЗрд╢рди рдкрд░ рд╕реВрдЪреАрдмрджреНрдз 14 рдореЗрдВ рд╕реЗ 12 рдЯреВрд▓, рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд╛рдг рдЪрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдкреАрдбрд╝рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА 1 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА) рд╕рдВрдкреАрдбрд╝рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг 2) рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА assets.zip рдмреНрд▓реЙрдм рдХреЛ vcs рдореЗрдВ рдЬрд╛рдВрдЪрдирд╛ 3) рд╢рд╛рдпрдж рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдПрдореНрдмреЗрдб рдПрдкреАрдЖрдИ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдВрдкреАрдбрд╝рди рдХреЛ рдкреВрд░реНрд╡рд╡рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдХрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд▓рд╛рдн рдХреНрдпрд╛ рд╣реИред

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рддреАрди рд▓рдХреНрд╖реНрдп рдереЗ:

  • рдЬреЗрдирд░реЗрдЯ рдХреА рдЧрдИ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЪреЗрдХ рдЗрди рди рдХрд░реЗрдВ
  • рдЧреЛ рдЗрдВрд╕реНрдЯрд╛рд▓ рдХрд░реЗрдВ / рдЧреЛ рдмрд┐рд▓реНрдб рдХрд░реЗрдВ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд░реЗрдВ
  • рдЬрд╣рд╛рдВ рдЙрдкрдпреБрдХреНрдд рд╣реЛ, рдмрд╛рдЗрдирд░реА рдореЗрдВ рд╕рдВрдкреАрдбрд╝рд┐рдд рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ

рдпрджрд┐ рд╣рдо рдЗрдирдореЗрдВ рд╕реЗ рджреВрд╕рд░реЗ рдХреЛ "рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдЙрдкрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ" рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рдпрд╛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рдирд╛ рдЗрди рддреАрдиреЛрдВ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред

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

рдЪреВрдВрдХрд┐ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЧреЛ рдХреЛрдб рдирд╣реАрдВ рд╣реЛрдЧрд╛тАа рдХреНрдпрд╛ рдпрд╣ _static рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдпрд╛, рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдордирдорд╛рдирд╛ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреЛ рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп ".go" рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ

рдпрджрд┐ рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИ, рддреЛ рддрд░реНрдХ рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкреЗрдбрд╝ рдореЗрдВ рдХреБрдЫ рднреА рдФрд░ рд╕рдмрдХреБрдЫ рдЦрддреНрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореИрдЬрд┐рдХ рдПрдореНрдмреЗрдб рдкреИрдХреЗрдЬ рдЖрдкрдХреЛ рдПрд╕реЗрдЯ рдЯреНрд░реА рдХреА рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП embed.Open("img/logo.svg") рдЬреИрд╕рд╛ рдХреБрдЫ рдХрд░рдиреЗ рджреЗ рд╕рдХрддрд╛ рд╣реИред

рддрд╛рд░ рдХрд╛рдлреА рдЕрдЪреНрдЫреЗ рд▓рдЧрддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ []byte рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ Reader рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред init рджреМрд░рд╛рди рдлреИрдирд╕реАрдпрд░ рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдФрд░ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬрдирд░реЗрд╢рди рдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдбреАрдХрдВрдкреНрд░реЗрд╕рди рдпрд╛ http.FileSystem рдмрдирд╛рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рд╡рд┐рдВрдбреЛрдЬрд╝ рдХреЗ рдкрд╛рд╕ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рд╛рд░реВрдк рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдВрдбреЛрдЬрд╝ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдмрдирд╛рддреЗ рд╕рдордп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреНрдпрд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдЗрд╕рдХрд╛ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИ?

рдЧрд┐рдЯрдлреНрд╕ рдХреЛ рдордд рднреВрд▓рдирд╛

рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдпрд╣ рдЧреЛ рдмрд┐рд▓реНрдб / рд▓рд┐рдВрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ... рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП go build -embed example=./path/example.txt рдФрд░ рдХреБрдЫ рдкреИрдХреЗрдЬ рдЬреЛ рдЙрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП embed.File("example") рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп go:embed ?

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдПрдХ рд╕реНрдЯрдм рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

@egonelbre go build -embed рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрд╕реЗ рдареАрдХ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП; рдореМрдЬреВрджрд╛ go install рдпрд╛ go get рдХрдорд╛рдВрдб рд╕рд╣реА рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

@bradfitz рдореИрдВ https://github.com/markbates/pkger рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рдпрд╣ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

func run() error {
    f, err := pkger.Open("/public/index.html")
    if err != nil {
        return err
    }
    defer f.Close()

    info, err := f.Stat()
    if err != nil {
        return err
    }

    fmt.Println("Name: ", info.Name())
    fmt.Println("Size: ", info.Size())
    fmt.Println("Mode: ", info.Mode())
    fmt.Println("ModTime: ", info.ModTime())

    if _, err := io.Copy(os.Stdout, f); err != nil {
        return err
    }
    return nil
}

рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдмрд┐рд▓реНрдб рдЯреИрдЧ рдпрд╛ рдЭрдВрдбреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдВред рдкрд░рдХреАрдк (рдКрдкрд░ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдореЗрдВ рдПрдХ рдРрд╕реА рд╡рд┐рдзрд╛ рд╣реИ, рдЬреЛ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рдПрдХ рдмрдбрд╝реЗ рдмрд╛рдЗрдирд░реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

mjibson/esc рдпрд╣ рднреА рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡реЗрдмрдПрдк рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдЬреАрд╡рди рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рд╕реБрдзрд╛рд░ рд╣реИ; рдЖрдк рди рдХреЗрд╡рд▓ рд▓рд┐рдВрдХрд┐рдВрдЧ рд╕рдордп рдмрдЪрд╛рддреЗ рд╣реИрдВ рдмрд▓реНрдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рд╕реЗ рднреА рдмрдЪрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╡реЗрдмрдПрдк рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдкрдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рдФрд░/рдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд░рдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдореМрдЬреВрджрд╛ рд╣рд╛рд▓рд╛рдд рд╕реЗ рдкрд░реЗрд╢рд╛рдиреА :

  • рдЧреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛: рдЬрдирд░реЗрдЯ-рдЖрдзрд╛рд░рд┐рдд рд╕рдорд╛рдзрд╛рди рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреА рджреВрд╕рд░реА (рдФрд░ рдереЛрдбрд╝реА рдмрдбрд╝реА) рдкреНрд░рддрд┐ рдХреЗ рд╕рд╛рде рдЧрд┐рдЯ рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рдлреБрд▓рд╛рддрд╛ рд╣реИред

рд▓рдХреНрд╖реНрдп:

  • рдЬреЗрдирд░реЗрдЯ рдХреА рдЧрдИ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЪреЗрдХ рдЗрди рди рдХрд░реЗрдВ

рдЦреИрд░, рдЬреЗрдирд░реЗрдЯ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ .gitignore рдлрд╝рд╛рдЗрд▓ рдпрд╛ рд╕рдордХрдХреНрд╖ рдореЗрдВ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕ рднрд╛рдЧ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рд╣рдореЗрд╢рд╛ рдпрд╣реА рдХрд┐рдпрд╛...

рдЗрд╕рд▓рд┐рдП, рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдЧреЛ рдХрд╛ рдЕрдкрдирд╛ "рдЖрдзрд┐рдХрд╛рд░рд┐рдХ" рдПрдореНрдмреЗрдб рдЯреВрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ go build рдкрд░ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рд▓реЛрдЧреЛрдВ рд╕реЗ рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рд╕рдореНрдореЗрд▓рди рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред рдпрд╣ рдХрдо рдЬрд╛рджреВ рд╕рдорд╛рдзрд╛рди рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ (рдФрд░ рдореМрдЬреВрджрд╛ рдЧреЛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдкрд┐рдЫрдбрд╝рд╛ рд╕рдВрдЧрдд)ред

рдореИрдВ рдпрд╣рд╛рдБ рд╕рд┐рд░реНрдл рд╡рд┐рдЪрд╛рд░-рдордВрдерди рдХрд░ рд░рд╣рд╛ рд╣реВрдБ / рдЬреЛрд░ рд╕реЗ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдБ ... рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдЪрд╛рд░ рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ рдкрд╕рдВрдж рд╣реИред рдореИрдВ

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдХреНрдпреЛрдВрдХрд┐ //go:generate рдирд┐рд░реНрджреЗрд╢реЛрдВ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдЪрд▓рд╛ go build рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ go build рдереЛрдбрд╝рд╛ рдЕрд╕рдВрдЧрдд рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ: //go:embed рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдп рдХрд░реЗрдЧреА, рд▓реЗрдХрд┐рди рдХреЗ рд▓рд┐рдП //go:generate рдЖрдкрдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ go generate рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ред ( //go:generate рдкрд╣рд▓реЗ рд╕реЗ рд╣реА go get рдкреНрд░рд╡рд╛рд╣ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ .go рдлрд╛рдЗрд▓реЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ)ред

//go:generate рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧреЛ рдЧреЗрдЯ рдлреНрд▓реЛ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ .go рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рддрд╛ рд╣реИ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╡рд╛рд╣, рдФрд░ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЖрдо рддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, go generate рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рдХрд╛рд╕-рдЕрдВрдд рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдпрд╣ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

@bradfitz рдЗрд╕реЗ http.FileSystem рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рдкреНрд░рдХрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ http.File рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рднреА рддреБрдЪреНрдЫ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ Open рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдЖрд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП stdlib http рдкреИрдХреЗрдЬ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ http.File рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ http.FileSystem рдЕрдиреБрд░реВрдк рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП

@andreynering //go:generate рдФрд░ //go:embed рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИрдВред рдпрд╣ рддрдВрддреНрд░ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рдирд┐рд░реНрдмрд╛рдз рд░реВрдк рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдордирдорд╛рдирд╛ рдХреЛрдб рдирд╣реАрдВ рдЪрд▓рд╛рдПрдЧрд╛ред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╛рди рдмрдирд╛рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ cgo go build рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ "рд╕рдВрдкреАрдбрд╝рд┐рдд рдмрдирд╛рдо рдирд╣реАрдВ" рдШреБрдВрдбреА рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реВрдВред рдЕрдЧрд░ рд╣рдо рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓реЛрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХрд┐рд╕ рд╕рдВрдкреАрдбрд╝рди, рд╕рдВрдкреАрдбрд╝рди рд╕реНрддрд░ рдЖрджрд┐ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдЬреЛрдбрд╝реЗрдВред рд╣рдореЗрдВ рдХреЗрд╡рд▓ рд╕рд╛рджреЗ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЬрдмрдХрд┐ рдореИрдВ рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдпрд╛рди рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рд╣рдореЗрдВ рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

https://tech.townsourced.com/post/embedding-static-files-in-go/#comparison рд╕рдкреЛрд░реНрдЯ рдХрдВрдкреНрд░реЗрд╢рди рдкрд░ рд╕реВрдЪреАрдмрджреНрдз 14 рдореЗрдВ рд╕реЗ 12 рдЯреВрд▓, рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рддрд░реНрдХ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред

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

рдХрдо рдмрд┐рд▓реНрдб рдЯрд╛рдЗрдо рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЕрддрд┐рд░рд┐рдХреНрдд рдореВрд▓реНрдп рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЧреЛ рдУрд╡рд░ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдФрд░ рдХрдо рд╕реНрдЯреЛрд░реЗрдЬ/рдЯреНрд░рд╛рдВрд╕рдлрд░ рдлреБрдЯрдкреНрд░рд┐рдВрдЯ рдХреЗ рд▓рд┐рдП рд╕реАрдкреАрдпреВ рд╕рдордп рдХреЛ рдХрдВрдкреНрд░реЗрд╢рди рдЯреНрд░реЗрдб рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧреЛ рдкреИрдХреЗрдЬ go build рдкрд░ рдХрдВрдкреНрд░реЗрд╢рди рдЪрд▓рд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдмрд┐рд▓реНрдб рдХреЗ рджреМрд░рд╛рди рдХреЗрд╡рд▓ рдПрд╕реЗрдЯ рдХреЛ рдХреЙрдкреА рдХрд░рдХреЗ рдЬреЛрдбрд╝реЗ рдЧрдП рд╕рдордп рд╕реЗ рднреА рдЕрдзрд┐рдХ рдмрд┐рд▓реНрдб рдЯрд╛рдЗрдо рдЬреЛрдбрд╝рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдореБрдЭреЗ рджреВрд╕рд░реЛрдВ рдХреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рд╕рдВрдкреАрдбрд╝рди рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд╕рдВрджреЗрд╣ рд╣реИред рдЬрдм рддрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдбрд┐рдЬрд╝рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рд╕рдВрдкреАрдбрд╝рди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЗрд╕реЗ рд╡рд╣рд╛рдВ рдбрд╛рд▓ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдХреЛ рд▓рд╛рдн рдкрд╣реБрдВрдЪрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реЗрдЬрд┐рдВрдЧред

рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╕рдВрдкреАрдбрд╝рди рдХреЗ рдмрд┐рдирд╛ рдмреЗрдХрд╛рд░ рд╣реЛрдЧреА, рд╕рдВрдкреАрдбрд╝рди рдПрдХ рдЕрдЪреНрдЫрд╛-рд╕реЗ-рдмрд╛рдЗрдирд░реА рдЖрдХрд╛рд░ рдХреЛ 100 рдПрдордмреА рд╕реЗ 50 рдПрдордмреА рддрдХ рдХрдо рдХрд░рдирд╛ рд╣реИ - рдЬреЛ рдХрд┐ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдбреАрд▓рдмреНрд░реЗрдХрд░ рднреА рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ . рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рддрдм рдирд╣реАрдВ рдЬрдм рдЕрдзрд┐рдХрд╛рдВрд╢ "рднрд╛рд░реА" рд╕рдВрдкрддреНрддрд┐ рдЬреЗрдкреАрдИрдЬреА рдпрд╛ рдкреАрдПрдирдЬреА рдЬреИрд╕реА рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрдкреАрдбрд╝рд┐рдд рд╣реИрдВред

рд╕рдВрдкреАрдбрд╝рди рдХреЛ рдЕрднреА рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░ рд░рдЦрдиреЗ рдФрд░ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдпрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? (рдФрд░ рдЕрдиреБрдЪрд┐рдд рд▓рд╛рдЧрдд рдХреЗ рдмрд┐рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)

рдКрдкрд░ @sakjur рдХреА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП: рд╕рдВрдкреАрдбрд╝рди рдореБрдЭреЗ рдСрд░реНрдереЛрдЧреЛрдирд▓ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдЖрдо рддреМрд░ рдкрд░ рдПрдХ рд╕рдВрдкреВрд░реНрдг рдмрд╛рдЗрдирд░реА рдпрд╛ рд░рд┐рд▓реАрдЬ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рди рдХрд┐ рдХреЗрд╡рд▓ рд╕рдВрдкрддреНрддрд┐рдпрд╛рдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдм рдЧреЛ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рджрд╕рд┐рдпреЛрдВ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рд╡реЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@mvdan рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рдЪрд┐рдВрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдХреНрд╕рд░ рдЬрдм рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХреБрдЫ рдЕрдиреНрдп рдкреНрд░реА-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╣реИ: рдЦрдирди, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрдХрд▓рди, рдбреЗрдЯрд╛ рд╕рдВрдкреАрдбрд╝рди, рдЫрд╡рд┐ рдХреНрд░рдВрдЪрд┐рдВрдЧ, рдЫрд╡рд┐ рдЖрдХрд╛рд░ рдмрджрд▓рдирд╛, рд╕реНрдкреНрд░рд╛рдЗрдЯ-рд╢реАрдЯреНрд╕ред рдПрдХрдорд╛рддреНрд░ рдЕрдкрд╡рд╛рдж рд╡реЗ рд╡реЗрдмрд╕рд╛рдЗрдЯреЗрдВ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ html/template ред рддреЛ, рдЕрдВрдд рдореЗрдВ, рдЖрдк рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ "рдореЗрдХрдлрд╛рдЗрд▓" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдкреВрд░реНрд╡-рд╕рдВрд╕рд╛рдзрд┐рдд рд╕рд╛рдордЧреНрд░реА рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрд╕ рдЕрд░реНрде рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдзреНрд╡рдЬ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рдЪрд┐рдВрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдХреНрд╕рд░ рдЬрдм рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХреБрдЫ рдЕрдиреНрдп рдкреВрд░реНрд╡-рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╣реИ: рдЦрдирди, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрдХрд▓рди, рдбреЗрдЯрд╛ рд╕рдВрдкреАрдбрд╝рди, рдЫрд╡рд┐ рдХреНрд░рдВрдЪрд┐рдВрдЧ, рдЫрд╡рд┐ рдЖрдХрд╛рд░ рдмрджрд▓рдирд╛, рд╕реНрдкреНрд░рд╛рдЗрдЯ-рд╢реАрдЯреНрд╕ред рдПрдХрдорд╛рддреНрд░ рдЕрдкрд╡рд╛рдж рдРрд╕реА рд╡реЗрдмрд╕рд╛рдЗрдЯреЗрдВ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ html/рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред

рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдПрдХ рдЙрдкрдпреЛрдЧреА рдбреЗрдЯрд╛ рдмрд┐рдВрджреБ рд╣реИред рд╢рд╛рдпрдж рд╕рдВрдкреАрдбрд╝рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЙрддрдиреА рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдиреА рджрд┐рдЦрддреА рдереАред рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ, рддреЛ рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдирд╛ рд╣реА рд╕рдордЭрджрд╛рд░реА рд╣реИред

рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╕рдВрдкреАрдбрд╝рди рдХреЗ рдмрд┐рдирд╛ рдмреЗрдХрд╛рд░ рд╣реЛрдЧреА, рд╕рдВрдкреАрдбрд╝рди рдПрдХ рдЕрдЪреНрдЫрд╛-рд╕реЗ-рдмрд╛рдЗрдирд░реА рдЖрдХрд╛рд░ рдХреЛ 100 рдПрдордмреА рд╕реЗ 50 рдПрдордмреА рддрдХ рдХрдо рдХрд░рдирд╛ рд╣реИ - рдЬреЛ рдХрд┐ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдбреАрд▓рдмреНрд░реЗрдХрд░ рднреА рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ .

рдХрдИ рдЧреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ (https://github.com/golang/go/issues/6853) рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдирд░реА рдЖрдХрд╛рд░ рдПрдХ рдмрдбрд╝реА рдмрд╛рдд рд╣реИред рдЧреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрд╛рдЗрдирд░реА рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреАрдбрдмреНрд▓реНрдпреВрдПрдЖрд░рдПрдл рдбреАрдмрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рд╕рдордп рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрдд рдкрд░ рдЖрддрд╛ рд╣реИ (https://github.com/golang/go/issues/11799, https://github.com/golang/go/ рдореБрджреНрджреЗ/26074)ред рдпрджрд┐ рдмрд╛рдЗрдирд░реА рдЖрдХрд╛рд░ рдХреЛ рдЖрдзреЗ рдореЗрдВ рдХрд╛рдЯрдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдерд╛, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЙрд╕ рдЕрд╡рд╕рд░ рдкрд░ рдЫрд▓рд╛рдВрдЧ рд▓рдЧрд╛рдПрдВрдЧреЗ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд▓рд╛рдн рд▓рдЧрднрдЧ рдЙрддрдирд╛ рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдЧрд╛)ред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ GOPATH рдореЛрдб рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк GOPATH рдореЛрдб рдореЗрдВ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Go рдЯреАрдо рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП GOPATH рдХреЗ рд▓рд┐рдП рдлреАрдЪрд░ рд╕рдорд╛рдирддрд╛ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛ рд░рд╣реА рд╣реИ? рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдЬреЛ GOPATH рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ (рдЬреИрд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ w/рдЪреЗрдХрд╕рдо рдбреАрдмреА, рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛, рдФрд░ рдЕрд░реНрдердкреВрд░реНрдг рдЖрдпрд╛рдд рд╕рдВрд╕реНрдХрд░рдг)

рдЬреИрд╕рд╛ рдХрд┐ @bcmills рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, go.mod рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╛рдо рд╣реЛрдирд╛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЧреЛ 1.15 рдореЗрдВ рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ go.mod рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдмрдВрдж рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ <=go1.14 рдХреНрд▓реЙрдЬ рд╣реЛрддрд╛ рд╣реИред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╕реНрдерд┐рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрде рдХреНрдпрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдХреНрд░реЗрддрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдФрд░ _test.go рд╕рдореНрдореЗрд▓рди рдЗрд╕ рдмрд╛рдд рдХреЗ рдорд╣рд╛рди рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЧреЛ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдЙрди рджреЛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛ рджрд┐рдпрд╛ред

рдореБрдЭреЗ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рд╡рд┐рдХреНрд░реЗрддрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╛рдо рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ _test.go рд╕рдореНрдореЗрд▓рди рдХреЛ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд░рдЦрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЧреЛ рдХрднреА рднреА _test.go рдлреАрдЪрд░ рдкреЗрд╢ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдЬ рдЧреЛ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдмрд╣реБрдд рдЕрд▓рдЧ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП, рд╢рд╛рдпрдж static рд╕реЗ рдХрдо рд╕рд╛рдорд╛рдиреНрдп рдирд╛рдо рдЧреИрд░-рдЯрдХрд░рд╛рд╡ рдХреА рдмреЗрд╣рддрд░ рд╕рдВрднрд╛рд╡рдирд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдкрд╛рд░рдВрдкрд░рд┐рдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ (рд╡рд┐рдХреНрд░реЗрддрд╛ рдФрд░ _test.go рдХреЗ рд╕рдорд╛рди) рд╣реЛрдиреЗ рд╕реЗ рдЬрд╛рджреБрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХрдо-рдЯрдХрд░рд╛рд╡ рд╡рд╛рд▓реЗ рдирд╛рдореЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг:

  • _embed - _test.go рд╕рдореНрдореЗрд▓рди рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ
  • go_binary_assets
  • .gobin .git рд╕рдореНрдореЗрд▓рди рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ
  • runtime_files - рддрд╛рдХрд┐ рдпрд╣ runtime.Files рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рдП

рдЕрдВрдд рдореЗрдВ, vendor рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ Go 1.5 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред рд╕реВ, рд╢рд╛рдпрдж рдЕрдм рдПрдХ рдирдпрд╛ рд╕рдореНрдореЗрд▓рди рдЬреЛрдбрд╝рдирд╛ рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ? рдореИрдВ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ mmap-readonly []byte рдмреЗрдирдХрд╛рдм рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╕реЗ рдкреГрд╖реНрдареЛрдВ рддрдХ рдХрдЪреНрдЪреА рдкрд╣реБрдВрдЪ, рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдУрдПрд╕ рджреНрд╡рд╛рд░рд╛ рдкреГрд╖реНрдард╛рдВрдХрд┐рддред рдЙрд╕рдХреЗ рдКрдкрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ bytes.NewReader ред

рдпрджрд┐ рдпрд╣ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ ReaderAt рди рдХрд┐ рдХреЗрд╡рд▓ ReadSeeker ; рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдкреВрд░реНрд╡ рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЫреЛрдЯрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рдЙрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ: рдЗрд╕реЗ рдПрдХрд▓ рдСрдлрд╕реЗрдЯ рдХреА рд░рдХреНрд╖рд╛ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╕рдВрдкреАрдбрд╝рди рдХреЗ рдмрд┐рдирд╛ рдмреЗрдХрд╛рд░ рд╣реЛрдЧреА, рд╕рдВрдкреАрдбрд╝рди рдПрдХ рдЕрдЪреНрдЫрд╛-рд╕реЗ-рдмрд╛рдЗрдирд░реА рдЖрдХрд╛рд░ рдХреЛ 100 рдПрдордмреА рд╕реЗ 50 рдПрдордмреА рддрдХ рдХрдо рдХрд░рдирд╛ рд╣реИ - рдЬреЛ рдХрд┐ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдбреАрд▓рдмреНрд░реЗрдХрд░ рднреА рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ .

рдХрдИ рдЧреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ (#6853) рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдирд░реА рдЖрдХрд╛рд░ рдПрдХ рдмрдбрд╝реА рдмрд╛рдд рд╣реИред рдЧреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрд╛рдЗрдирд░реА рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреАрдбрдмреНрд▓реНрдпреВрдПрдЖрд░рдПрдл рдбреАрдмрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рд▓рд┐рдВрдХ рд╕рдордп (# 11799, # 26074) рдХреА рд▓рд╛рдЧрдд рдкрд░ рдЖрддрд╛ рд╣реИред рдпрджрд┐ рдмрд╛рдЗрдирд░реА рдЖрдХрд╛рд░ рдХреЛ рдЖрдзреЗ рдореЗрдВ рдХрд╛рдЯрдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдерд╛, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЙрд╕ рдЕрд╡рд╕рд░ рдкрд░ рдЫрд▓рд╛рдВрдЧ рд▓рдЧрд╛рдПрдВрдЧреЗ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд▓рд╛рдн рд▓рдЧрднрдЧ рдЙрддрдирд╛ рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдЧрд╛)ред

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

рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рдВрдкреАрдбрд╝рди рдХреЛ рдПрдХ рдмрд┐рд▓реНрдб-рдлреНрд▓реИрдЧ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдФрд░ рдирд┐рд░реНрдорд╛рдг рдЖрдХрд╛рд░ рдФрд░ рд╕рдордп рдХреЗ рдмреАрдЪ рд╕рдордЭреМрддрд╛ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдмрдЬрд╛рдп рдмрд┐рд▓реНрдбрд░ рдкрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╣ рдирд┐рд░реНрдгрдп рдХреЛ рдмрд╛рдЗрдирд░реА рдХреЗ рдЕрдВрддрд┐рдо-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрд░реАрдм рд▓реЗ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдпрд╣ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕рдВрдкреАрдбрд╝рди рд╕рд╛рд░реНрдердХ рд╣реИред рдУрдЯреЛ, рдпрд╣ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдЙрддреНрдкрд╛рджрди рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдврд╝реА рд╣реБрдИ рд╕рддрд╣ рдХреНрд╖реЗрддреНрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рдЙрдард╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдХрдЯ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдРрд╕рд╛ рдХреБрдЫ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрдкрддреНрддрд┐ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдЯреВрд▓ -tags dev рд╕рд╛рде рдирд┐рд░реНрдорд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╕рдВрдкрддреНрддрд┐ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреБрдЫ рд╕рдореНрдореЗрд▓рди рд╢рд╛рдпрдж рдпрд╣рд╛рдВ рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреЗ; рдпрд╣ рд╡рд┐рдХрд╛рд╕ рдЪрдХреНрд░ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЫреЛрдЯрд╛ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдЪрдЯреАрдПрдордПрд▓ рдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдЭреБрдХрд╛рд╡ред

рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреЙрд▓рд░ рдХреЛ рдЗрд╕ рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдХреЗ рддрдВрддреНрд░ рдХреЛ рдХреБрдЫ *_dev.go рдФрд░ *_nodev.go рд░реИрдкрд░ рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ dev рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЧреИрд░-рдПрдореНрдмреЗрдбреЗрдб рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХрдард┐рди рднреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣ рд╕рдбрд╝рдХ рдЙрдкрдХрд░рдг рдХреЗ рд╕рдорд╛рди рд╡рд┐рд╕реНрдлреЛрдЯ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдПрдЧреА рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдкрд╣рд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред рдЙрди рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдЖрдЬ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╡реЗ рдлрд┐рд░ рднреА рдЧреБрдгрд╛ рдХрд░реЗрдВрдЧреЗред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд╣рд░ рдЪрд▓рдиреЗ рдкрд░ -tags dev рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛрдирд╛ рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛ (рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддрд╛ рдХрд┐ рд╕рдВрдкрддреНрддрд┐ рдХрд╣рд╛рдВ рд╕реЗ рд▓реЛрдб рдХреА рдЬрд╛рдП)ред

рдХреЗрд╡рд▓ рдПрдХ go tool embed рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ рдЬреЛ рдЗрдирдкреБрдЯ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдХрдВрдкреНрдпреВрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдПрдореНрдмреЗрдбреЗрдб рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЧреЛ рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рддрдм runtime/emved рдпрд╛ рдХреБрдЫ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддрдм рдЖрдк рдмрд╕ рдПрдХ рд╕рд╛рдзрд╛рд░рдг //go:generate gzip -o - static.txt | go tool embed -o static.go ред

рдмреЗрд╢рдХ, рдПрдХ рдмрдбрд╝рд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд╣рд▓реВ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЬреЗрдирд░реЗрдЯ рдХреА рдЧрдИ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

@DeedleFake рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рд╣реБрдИ

рдЧреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛: рдЬрдирд░реЗрдЯ-рдЖрдзрд╛рд░рд┐рдд рд╕рдорд╛рдзрд╛рди рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреА рджреВрд╕рд░реА (рдФрд░ рдереЛрдбрд╝реА рдмрдбрд╝реА) рдкреНрд░рддрд┐ рдХреЗ рд╕рд╛рде рдЧрд┐рдЯ рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рдлреБрд▓рд╛рддрд╛ рд╣реИред

рд╡реВрдкреНрд╕ред рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВред рдорд╛рдлрд╝ рдХрд░рдирд╛ред

рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╕рдВрдкреАрдбрд╝рди рдХреЗ рдмрд┐рдирд╛ рдмреЗрдХрд╛рд░ рд╣реЛрдЧреА, рд╕рдВрдкреАрдбрд╝рди рдПрдХ рдЕрдЪреНрдЫрд╛-рд╕реЗ-рдмрд╛рдЗрдирд░реА рдЖрдХрд╛рд░ рдХреЛ 100 рдПрдордмреА рд╕реЗ 50 рдПрдордмреА рддрдХ рдХрдо рдХрд░рдирд╛ рд╣реИ - рдЬреЛ рдХрд┐ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдбреАрд▓рдмреНрд░реЗрдХрд░ рднреА рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ .

рдХрдИ рдЧреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ (#6853) рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдирд░реА рдЖрдХрд╛рд░ рдПрдХ рдмрдбрд╝реА рдмрд╛рдд рд╣реИред рдЧреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрд╛рдЗрдирд░реА рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреАрдбрдмреНрд▓реНрдпреВрдПрдЖрд░рдПрдл рдбреАрдмрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рд▓рд┐рдВрдХ рд╕рдордп (# 11799, # 26074) рдХреА рд▓рд╛рдЧрдд рдкрд░ рдЖрддрд╛ рд╣реИред рдпрджрд┐ рдмрд╛рдЗрдирд░реА рдЖрдХрд╛рд░ рдХреЛ рдЖрдзреЗ рдореЗрдВ рдХрд╛рдЯрдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдерд╛, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЙрд╕ рдЕрд╡рд╕рд░ рдкрд░ рдЫрд▓рд╛рдВрдЧ рд▓рдЧрд╛рдПрдВрдЧреЗ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд▓рд╛рдн рд▓рдЧрднрдЧ рдЙрддрдирд╛ рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдЧрд╛)ред

рдпрджрд┐ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рд╕рдВрдкреАрдбрд╝рд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рддрд┐рдмрджреНрдз рдФрд░ рдПрдореНрдмреЗрдбреЗрдб рд╣реЛрдЧрд╛, рдФрд░ runtime.Embed рдФрд░ рдЕрдВрддрд┐рдо рдЙрдкрднреЛрдХреНрддрд╛ рдХреЗ рдмреАрдЪ рдПрдХ рдкрд░рдд рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рд╣реЛрдВрдЧреЗ рдЬреЛ рдбреАрдХрдВрдкреНрд░реЗрд╕рди рдЗрдирд▓рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВред

рдФрд░ рдлрд┐рд░ рдЕрдм рд╕реЗ рдПрдХ рдпрд╛ рджреЛ рд╕рд╛рд▓ рдмрд╛рдж рд╕рдВрдкреАрдбрд╝рди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рддрдм рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕реЗ 15 рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдорд╛рдирдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╣рддрд╛ рд╣реВрдВ рдЬрдм рдореИрдВрдиреЗ рдЧреЛрдореНрдмреЗрдб рд▓рд┐рдЦрд╛

@tv42 рдиреЗ рд▓рд┐рдЦрд╛:

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ mmap-readonly []byte рдмреЗрдирдХрд╛рдм рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╕реЗ рдкреГрд╖реНрдареЛрдВ рддрдХ рдХрдЪреНрдЪреА рдкрд╣реБрдВрдЪ, рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдУрдПрд╕ рджреНрд╡рд╛рд░рд╛ рдкреГрд╖реНрдард╛рдВрдХрд┐рддред

рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдЖрд╕рд╛рдиреА рд╕реЗ рдЫреВрдЯ рдЬрд╛рддреА рд╣реИ рдФрд░ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдореВрд▓реНрдпрд╡рд╛рди рд╣реИред

@ рдЯреАрд╡реА42 ,

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдПрдордПрдордПрдкреА-рд░реАрдбреЛрдирд▓реА [] рдмрд╛рдЗрдЯ рдХрд╛ рдкрд░реНрджрд╛рдлрд╛рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╕реЗ рдкреГрд╖реНрдареЛрдВ рддрдХ рдХрдЪреНрдЪреА рдкрд╣реБрдВрдЪ, рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдУрдПрд╕ рджреНрд╡рд╛рд░рд╛ рдкреГрд╖реНрдард╛рдВрдХрд┐рддред рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдЙрд╕рдХреЗ рдКрдкрд░, рдХреЗрд╡рд▓ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдиреНрдпреВ рд░реАрдбрд░ред

рд╡рд╣ рдкреНрд░рдХрд╛рд░ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ string ред рд╕рд╛рде рд╣реА: рдпрд╣ io.ReaderAt рд╡рд┐рдкрд░реАрдд рдПрдХ рдЖрдХрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣реА рд╣рдо рдмреЗрдирдХрд╛рдм рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╡рд╣ рдкреНрд░рдХрд╛рд░ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ string ред

рд▓реЗрдХрд┐рди рдкреВрд░реЗ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ Write рдЖрджрд┐ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ []byte ред рдпрд╣ рд╕рд░рд▓ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рд╕рдВрдкрддреНрддрд┐ io.Writer.Write рдбреЙрдХреНрд╕ рдХреЗ рдХрд╣рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ

рд░рд╛рдЗрдЯ рдХреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рднреА рд╕реНрд▓рд╛рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдХ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ go:generate рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдПрдореНрдмреЗрдб рдХрд░рддреЗ рд╕рдордп рдореИрдВ git diff рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЧрд▓рддреА рд╕реЗ рдХреЛрдИ рдлрд╛рдЗрд▓ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде - ? рд╢рд╛рдпрдж рдЧреЛ рдХрдорд╛рдВрдб рдЙрди рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛ рдЬреЛ рдЗрд╕реЗ рдПрдореНрдмреЗрдб рдХрд░ рд░рд╣реА рд╣реИрдВ?

@tv42

рд▓реЗрдХрд┐рди рд░рд╛рдЗрдЯ рдЖрджрд┐ рдХрд╛ рдкреВрд░рд╛ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо []byte рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, html/template рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЬрд╛рдУ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдкрдХреЛ рдХреБрдЫ рддрд╛рд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП -ldflags -X рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рджреЗрдВ (рдЧрд┐рдЯ рд╕рдВрд╕реНрдХрд░рдг, рд╕рдВрдХрд▓рди рд╕рдордп, рд╕рд░реНрд╡рд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрддреНрдпрд╛рджрд┐ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА), рдХреНрдпрд╛ рдЗрд╕ рддрдВрддреНрд░ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп io.Readers рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

@bradfitz рдХреНрдпрд╛ рдЖрдк рдпрд╣рд╛рдВ рдЙрди рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЯреЗрдХреНрд╕реНрдЯ рдирд╣реАрдВ рд╣реИ? рдЫреЛрдЯреА рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдЬреИрд╕реЗ рдЖрдЗрдХрди рдФрд░ рдЫреЛрдЯреА рдЫрд╡рд┐рдпреЛрдВ рдЖрджрд┐ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрдо рд╣реИред

@ tv42 рдЖрдкрдиреЗ рдХрд╣рд╛ Write рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм Read ред рдЖрдк string рдХреЛ io.ReaderAt рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ strings.NewReader , рдЗрд╕рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡рд╣рд╛рдВ рдПрдХ рдмрд╛рдзрд╛ рдХреА рддрд░рд╣ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

@andreynering A string рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдХрд┐рд╕реА рднреА рдХреНрд░рдо рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ string рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдХрд┐рд╕реА рднреА рдХреНрд░рдо рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рдБ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдкреНрд░рд╛рдердорд┐рдХ рдЙрджреНрджреЗрд╢реНрдп рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рд╣реЛрд▓реНрдб рдХрд░рдирд╛ рд╣реИ, рди рдХрд┐ рдордирдорд╛рдирд╛ рдбреЗрдЯрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ рднреНрд░рдо рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдиреБрднрд╡рд╣реАрди рдЧреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдПред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдорд┐рд▓рд╛ред рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

@ianlancetaylor

Read рдореЗрдВ рдкрд╛рд░рд┐рдд рд╕реНрд▓рд╛рдЗрд╕ рдХреЛ рдмрджрд▓рдирд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред Write рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП Write рдкреНрд░рд▓реЗрдЦрди рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдФрд░ рдХреБрдЫ рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд▓реМрдЯрд╛рдП рдЧрдП []byte рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ strings.Reader рдореМрдЬреВрдж рд╣реИ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ io.WriteString рд▓реЗрдЦрди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдПрдХ рдХреБрд╢рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд╛рдПрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, TCPConn рдореЗрдВ WriteString ред

рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рд╕реЗ рдирдлрд░рдд рд╣реИ, рдХреЗрд╡рд▓ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реЙрдХреЗрдЯ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдПред

рд╕рд╛рде рд╣реА, рд╕рд╛рдорд╛рдиреНрдп рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рддрд╛рд░ рдорд╛рдирд╡-рдореБрджреНрд░рдг рдпреЛрдЧреНрдп рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ []byte рдЕрдХреНрд╕рд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред JPEG рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ рд░рдЦрдиреЗ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧрдбрд╝рдмрдбрд╝ рдЯрд░реНрдорд┐рдирд▓ рд╣реЛрдВрдЧреЗред

@opennota

html/рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ред

рд╣рд╛рдБ, рдпрд╣ рдПрдХ рдЕрдЬреАрдм рдмрд╛рдд рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдкрдердирд╛рдо рд╕реЗ рдлрд╛рдЗрд▓реЗрдВ рд▓реЗрддрд╛ рд╣реИ рдкрд╛рдардХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВред рджреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ:

  1. рдРрд╕рд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдореНрдмреЗрдб рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдореЗрдВ Bytes() []byte рдФрд░ String() string рджреЛрдиреЛрдВ рд╡рд┐рдзрд┐рдпрд╛рдВ рди рд╣реЛрдВред

  2. рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ; рдЬрдмрдХрд┐ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рдЬреЗрдкреАрдИрдЬреА рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдЯреАрд╕реАрдкреА рд╕реЙрдХреЗрдЯ рдореЗрдВ рднреЗрдЬрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реИред

@ tv42 рд╣рдо рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ WriteString рддрд░реАрдХреЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдмрд╕реЗ рдЖрдо рдЙрдкрдпреЛрдЧ рдЕрдирдореЛрдбрд┐рдлрд╛рдЗрдб рдбреЗрдЯрд╛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдмрд╕реЗ рдЖрдо рдЙрдкрдпреЛрдЧ рдЕрдирдореЙрдбрд┐рдлрд╛рдЗрдб рдбреЗрдЯрд╛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛,

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдмрд╕реЗ рдЖрдо рдЙрдкрдпреЛрдЧ рд╡реЗрдм рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ, рдЫрд╡рд┐рдпреЛрдВ/рдЬреЗрдПрд╕/рд╕реАрдПрд╕рдПрд╕, рдЕрдирдореЛрдбрд┐рдлрд╛рдЗрдб рдХреА рд╕реЗрд╡рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╢рдмреНрдж рди рд▓реЗрдВ, рдЖрдЗрдП рдмреНрд░реИрдб рдХреЗ рдлрд╛рдЗрд▓рдордмреЗрдб рдХреЗ рдХреБрдЫ рдЖрдпрд╛рддрдХреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ:

#fileembed pattern .+\.(js|css|html|png|svg|js.map)$
#fileembed pattern .*\.png



md5-f8b48fccd03599094034bf2b507e9e67



#fileembed pattern .*\.js$

рдФрд░ рдЗрд╕реА рддрд░рд╣..

рдЙрдкрд╛рдЦреНрдпрд╛рдирд╛рддреНрдордХ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП: рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рддреЛ рдореИрдВ рддреБрд░рдВрдд рдЗрд╕реЗ рдХрд╛рдо рдкрд░ рджреЛ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рдФрд░ рджреЛрдиреЛрдВ рд╕реНрдерд┐рд░ рдкрд╛рдареНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд╕рдВрд╢реЛрдзрд┐рдд рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрднреА рд╣рдо рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдерд┐рд░ (рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓-рдкреНрд░рд╛рд░реВрдк) рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП //go:generate рдЪрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╡рд┐рдкрд░реАрдд рдирдП рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рд╡реЛрдЯ рдХрд░реВрдВрдЧрд╛ред рдЗрд╕ рдкрд░ рдкрдХрдбрд╝ рдмрдирд╛рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рд╕рдВрднрд╛рд▓рдирд╛/рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЧреЛ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдвреВрдВрдв рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ "go:generate"? тАЬfmtтАЭ рдкреИрдХреЗрдЬ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдХреНрдпрд╛ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдореБрдЭреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╣рд╛рдВ рдЬрд╛рдирд╛ рд╣реИ?

рддреЛ, рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдЧреЛ рдХрд╛ рдЕрдкрдирд╛ "рдЖрдзрд┐рдХрд╛рд░рд┐рдХ" рдПрдореНрдмреЗрдб рдЯреВрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ go build рдкрд░ рдЪрд▓рддрд╛ рд╣реИ

@andreynering рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХ рдФрд░ рднрд╛рд╖рд╛ рдЙрдкрдХрд░рдг рдЗрд╕реЗ рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рдордирдорд╛рдиреА рдХреЛрдб/рдХрдорд╛рдВрдб рдЪрд▓рд╛рдирд╛ рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рднреЗрджреНрдпрддрд╛ рд╣реИ (рдЬреЛ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдг рд╣реИрдВ)ред

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╕рдордп рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд╛рддреЗрдВ рдЖрддреА рд╣реИрдВ:

  • рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рдмрд┐рд▓реНрдб рдХреИрд╢ рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛?
  • рдХреНрдпрд╛ рдпрд╣ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд┐рд░реНрдорд╛рдг рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ? рдпрджрд┐ рдбреЗрдЯрд╛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рдирд╛), рддреЛ рдЗрд╕реЗ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдпрддрд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕реНрдЯрдлрдмрд┐рди , рдкрд╣рд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╕реНрд╡рдпрдВ-рд╣реЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╕реНрдерд┐рд░ (рдПрдЪрдЯреАрдПрдордПрд▓, рдЬреЗрдПрд╕ ...) рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рд╕рдВрдХрд▓рди/рд╕рдВрдкреАрдбрд╝рди рдЪрд░реНрдЪрд╛ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдПрдХ рдФрд░ рджрд░реНрдж рдмрд┐рдВрджреБ stdlib рдореЗрдВ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдЕрдмрд╛рд╕реНрдЯреНрд░рдХреНрд╢рди рдХреА рдХрдореА рд╣реИ рдХреНрдпреЛрдВрдХрд┐:

  • рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреА рдорд╢реАрди рдкрд░, рдХрдИ go run s рдФрд░ рдмрд┐рд▓реНрдб рдХреЛ рдПрдореНрдмреЗрдбрд┐рдВрдЧ (рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рддреЗ рд╕рдордп) рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рдКрдкрд░реА рд╣рд┐рд╕реНрд╕реЗ рд╕реЗ рдмреЛрдЭ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рд╕реНрдерд╛рдиреАрдп рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ _failover_ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдПрдореНрдмреЗрдб рдкреИрдХреЗрдЬ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо-рдЬреИрд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдкрд░реНрджрд╛рдлрд╛рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ http.FileSystem рд╕реЗ рдмреЗрд╣рддрд░ рдХреБрдЫ, рдпрд╣ рдЗрди рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░реЗрдЧрд╛ред

рдПрдореНрдмреЗрдб рдФрд░ рд╕реНрдерд╛рдиреАрдп рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмреАрдЪ рдирд┐рд░реНрдмрд╛рдз рд░реВрдк рд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдЖрд╡реЗрджрди рд╕реНрддрд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ, рдирд╣реАрдВ?

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдЖрд╡реЗрджрди рд╕реНрддрд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ, рдирд╣реАрдВ?

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЕрднреА рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╢рдмреНрдж рджрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИред рдореИрдВ рдПрдореНрдмреЗрдб рдкреИрдХреЗрдЬ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕, http.FileSystem рд╕реЗ рдмреЗрд╣рддрд░ рдХреБрдЫред рдпрд╣ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдореВрд░реНрддрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЯрд╛рдЗрдкреЛред

@knadh рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдЬрдм рдЖрдк go run рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдкреИрдХрд░ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИред рдпрд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдлрд╛рдЗрд▓реЗрдВ рдХрд╣рд╛рдВ рд╣реИрдВ, рдЕрдЧрд░ рд╡реЗ рдРрдк рдореЗрдВ рдПрдореНрдмреЗрдб рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдбрд┐рд╕реНрдХ рд╕реЗ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ "рд╡рд┐рдХрд╛рд╕ рдореЛрдб" рд╣реЛрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред

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

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди "рдПрдореНрдмреЗрдб рдкреИрдХреЗрдЬ рджреГрд╖реНрдЯрд┐рдХреЛрдг" рдмрд╣реБрдд рдЬрд╛рджреБрдИ рд╣реИ, рдпрд╣ рдХреБрдЫ рдЕрдЬреАрдмрддрд╛ рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЯреВрд▓ рдХреЙрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдпрд╣ рдШрдЯрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕реЗ рдПрдкреАрдЖрдИ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

package embed
func FileReader(name string) io.Reader {тАж}
func FileReaderAt(name string) io.ReaderAt {тАж}
func FileBytes(name string) []byte {тАж}
func FileString(name string) string {тАж}

рдпрджрд┐ рдЧреЛ рдЯреВрд▓ рдХреЛ FileReaderAt рдХреЙрд▓ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдпрд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдЕрд╕рдореНрдкреАрдбрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдпрд╣ рдХреЗрд╡рд▓ FileReader рдХреЙрд▓ рдкрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдкреАрдбрд╝рд┐рдд рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЕрдЧрд░ рдЙрд╕реЗ FileBytes рдХреЙрд▓ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рд╡рд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЙрд╕реЗ рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдЕрдЧрд░ рдЙрд╕реЗ рдХреЗрд╡рд▓ FileString , рддреЛ рдпрд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдореГрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЗрд╕реА рддрд░рд╣ред

рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдЪрд┐рдд рдЙрдкрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрдЪрд┐рдд рддрд░реАрдХрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдВрдкреАрдбрд╝рди рдФрд░ рд╢реВрдиреНрдп-рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХреЗ рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдШреБрдВрдбреА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

[рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ] рднреА, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдЗрдП рд╣рдо рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рдж рдЗрди рдЕрддрд┐рд░рд┐рдХреНрдд рдореИрдВрдЧрд▓рд┐рдВрдЧ рдЪреАрдЬреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рдЕрдзрд┐рдХ рдиреНрдпреВрдирддрдо рдлреАрдЪрд░-рд╕реЗрдЯ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ [/ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ]

рдЕрдЧрд░ рдпрд╣ рдХреЗрд╡рд▓ FileReader рдХреЙрд▓ рдкрд╛рддрд╛ рд╣реИ ...

рдпрд╣ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреНрдп рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред

[рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ] рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдкреНрд░рднрд╛рд╡ рдЗрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд╣реИрдВред рдХреЗ рдЙрдкрдпреЛрдЧ рд╣реИрдВ FileReaderAt рдПрдХ рд╕рдВрдХреЗрдд рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдЕрд╕рдореНрдкреАрдбрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рд╣реИ, рддреЛ рдХреЗ рдЙрдкрдпреЛрдЧ FileReaderAt() рдХрд┐рд╕реА рднреА рдЧреИрд░ рдХреЗ рд╕рд╛рде const рдЗрдирдкреБрдЯ рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ рдХрд┐ рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдЕрд╕рдореНрдкреАрдбрд┐рдд рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдпрд╛ рдмреБрд░рд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд╛рджреВ рд╣реНрдпреБрд░рд┐рд╕реНрдЯрд┐рдХ рд▓рдЧрднрдЧ рдЙрддрдирд╛ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬрд┐рддрдирд╛ рдХрд┐ рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╛рдо ( static/ //go:embed ) рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдкреНрд░рд╛рдЧреНрдорд╛ ( _test.go рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдо рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░реЗрдЧрд╛: рдпрджрд┐ рд╡рд╣ рдкреИрдХреЗрдЬ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╣реИ рддреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдПрдХ рдкреИрдХреЗрдЬ _test.go рдлрд╝рд╛рдЗрд▓ рдореЗрдВ //go:embedglob testdata/* рдЬреИрд╕реА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдЕрдиреНрдп рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдкреИрдХреЗрдЬ рдХреЛ рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЦреАрдВрдЪреЗ рдмрд┐рдирд╛ рдПрдХ рдирд┐рдпрдорд┐рдд рдЧреИрд░-рдкрд░реАрдХреНрд╖рдг рдмрд╛рдЗрдирд░реА рдореЗрдВ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@ fd0 ,

рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рдмрд┐рд▓реНрдб рдХреИрд╢ рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛?

рдпрд╣ рдЕрднреА рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдПрдореНрдмреЗрдбреЗрдб рдлрд╝рд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА рд╣реИрд╢ рдХреЛ рдХреИрд╢ рдХреБрдВрдЬреА рдореЗрдВ рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдХреНрдпрд╛ рдПрдХ рдореЙрдбреНрдпреВрд▓/рдкреИрдХреЗрдЬ/рддрдВрддреНрд░ рд╣реЛрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ (рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░) рдЬреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рд╣реЛрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рдЕрдВрджрд░ рд╕реЗ рдЖрдк рдмрд╕ рдПрдХ рд░рд╛рд╕реНрддрд╛ рдЦреЛрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ

internal://static/default.css

рдФрд░ рдлрд╝рд╛рдЗрд▓ рдлрд╝рдВрдХреНрд╢рди рдмрд╛рдЗрдирд░реА рдХреЗ рдЕрдВрджрд░ рдпрд╛ рдХрд┐рд╕реА рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реНрдерд╛рди рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝реЗрдЧрд╛
рдкреВрд░реНрд╡ Package.Mount("internal[/<folder>.]", binary_path + "/resources/")

рдмрд╛рдЗрдирд░реА рдореЗрдВ рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде "рдЖрдВрддрд░рд┐рдХ: //" рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдкрде/рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рд╡рд╛рдкрд╕ рдЖрдПрдВ/рдпрджрд┐ рджреЗрд╡ рдореЛрдб рдореЗрдВ рдпрд╛ рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдмрд╛рдЗрдирд░реА рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓реА рд╣реИ (рдФрд░ рд╢рд╛рдпрдж рд▓реЙрдЧрд┐рдВрдЧ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдиреА рдпрд╛ рдХреБрдЫ рдлреЗрдВрдХ рджреЗрдВ)

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛

Package.Mount("internal", binary_path  + "/resources/private/")
Package.Mount("anotherkeyword", binary_path  + "/resources/content/")

'рд░рд┐рд▓реАрдЬрд╝' рдореЛрдб рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реНрдерд╛рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЗ рдкрде рдкрд░ рд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рджреЗрд╡ рдореЛрдб рдореЗрдВ рдЖрд░рд╛рдо рджреЗрдВ (рдХреЗрд╡рд▓ go_path рдореЗрдВ рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдВ рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ)

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдкреИрдХреЗрдЬ рдЖрдВрддрд░рд┐рдХ: // рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреАрд╡рд░реНрдб рдХреЛ "рдорд╛рдЙрдВрдЯ" рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рджреЗрдВ рдпрджрд┐ рд╡рд╣ рдЪрд╛рд╣рддрд╛ рд╣реИ .. рдЙрджрд╛ред рд░реАрдорд╛рдЙрдВрдЯ ("рдЖрдВрддрд░рд┐рдХ", "myCustomName") рдпрд╛ рдРрд╕рд╛ рдХреБрдЫред

рдПрдХ рдФрд░ рдмрд╛рдд ... рдХреНрдпрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реНрдерд╛рди рдкрд░ рдЕрдВрддрд┐рдо рдкрд░рд┐рд╡рд░реНрддрди/рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдордп рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмрд╛рд╣рд░ рдРрд╕реА рдлрд╝рд╛рдЗрд▓ рд╣реЛрдиреЗ рдкрд░ рдЖрдВрддрд░рд┐рдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ (рд╢рд╛рдпрдж рдЗрд╕рдХреЗ рд▓рд┐рдП рдзреНрд╡рдЬ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)
рдпрд╣ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕реБрдкрд░ рдлрд╛рд╕реНрдЯ рдкреИрдЪ рдХреЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ рдирдП рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╡рд┐рддрд░рд┐рдд рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ .. рдЖрдк рдХреЗрд╡рд▓ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдмрд╛рдЗрдирд░реА рдирдП рдкрд░ рд╕реНрд╡рд┐рдЪ рд╣реЛ рдЬрд╛рдПрдЧреА рдлрд╝рд╛рдЗрд▓ред

рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░, рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдпрд╛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ (рдЬреИрд╕реЗ рд╕рдВрд╕рд╛рдзрди рдореЗрдВ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдмреНрд▓реЙрдм рдореЗрдВ)
рдФрд░ рдереЛрдбрд╝рд╛ рдЕрд╕рдВрдмрдВрдзрд┐рдд, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдпрд╣ рдкреИрдХреЗрдЬ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп, рдпрд╛ рдкреНрд░рдХрдЯ рдбреЗрдЯрд╛, рдпрд╛ рд╢рд╛рдпрдж рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ рдмрдВрдбрд▓рд┐рдВрдЧ рдЖрдЗрдХрди рд╕реЗ рднреА рдирд┐рдкрдЯ рд╕рдХрддрд╛ рд╣реИ? рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд╡рд┐рдВрдбреЛрдЬрд╝ рд╣реИ ...
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрдорд╛рддрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЕрдВрддрд┐рдо рд╕рдВрд╢реЛрдзрд┐рдд/рдкрд░рд┐рд╡рд░реНрддрди рддрд┐рдерд┐рдпреЛрдВ рдХреЛ рд▓реЙрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдмрджрд▓рддреА рд╣реИ рдФрд░ рдмреНрд▓реЙрдм рдХреЛ рдХрд╣реАрдВ рдХреИрд╢ рдХрд░рддреА рд╣реИ рддреЛ рдХреЗрд╡рд▓ "рдбреЗрдЯрд╛ рдХрд╛ рдмреНрд▓реЙрдм рдмрдирд╛рдПрдВ" рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддреА рд╣реИред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ "рдХреИрд╢" рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрди рдмрдВрдбрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рд╕рдВрдкреАрдбрд╝рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдирддрд╛ рд╣реИ (рдпрджрд┐ рдпрд╣ рдЕрдВрддрддрдГ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) ... , рдЕрдиреНрдп рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдХреИрд╢ рд╕реЗ рдмрд╛рдЗрдирд░реА рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЬреЛ рдореБрдЭреЗ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдкреИрдХреЗрдЬ рдХрд╕реНрдЯрдо рдирд╛рдореЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдмреНрд▓реИрдХрд▓рд┐рд╕реНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬреИрд╕реЗ рдХрд┐ "udp, рдлрд╝рд╛рдЗрд▓, ftp, http, https рдФрд░ рдХрдИ рдЕрдиреНрдп рд▓реЛрдХрдкреНрд░рд┐рдп рдХреАрд╡рд░реНрдб" рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред

рдмрд╛рдЗрдЯ рд╕рд░рдгреА/рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рд╕рдВрдкреАрдбрд╝рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреЛрд░ рдХреЗ рд▓рд┐рдП ... imho рдЬреЛ рднреА рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рдЫреЛрдбрд╝рдиреА рдЪрд╛рд╣рд┐рдП ... рдкреВрд░реНрд╡ рдореЗрдВ рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрдкреАрдбрд╝рди рдХреЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдСрдлрд╝рд╕реЗрдЯ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд▓реЗрдХрд┐рди рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдВрдкреАрдбрд╝рди рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ (рдЙрджрд╛ рд╡рд┐рдзрд┐ zlib, lzma, рд╕рдВрдкреАрдбрд╝рд┐рдд рдЖрдХрд╛рд░, рдЕрд╕рдореНрдкреАрдбрд┐рдд рдЖрдХрд╛рд░ рдпрджрд┐ рдЗрд╕реЗ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдореГрддрд┐ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЖрджрд┐ред

рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдпреВрдкреАрдПрдХреНрд╕ рдпрд╛ рд╕рдордХрдХреНрд╖ рдХреЗ рд╕рд╛рде рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдЗрдирд░реА рд╕реНрдореГрддрд┐ рдореЗрдВ рдЕрдирдкреЕрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдЬреЛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ:

  • рдореБрдЭреЗ рдЧреЛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП package embed рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд╕рдВрдж рд╣реИ
  • рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдкреАрдбрд╝рди рдФрд░ рдЕрдиреНрдп рд╣реЗрд░рдлреЗрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдмрд╛рдЗрдирд░реА рдЖрдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдХ рднрдВрдбрд╛рд░ рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рдмрд╕реЗ рднрд┐рдиреНрди-рдЕрдиреБрдХреВрд▓ рд░реВрдк рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣рд╛рдВ рдХреЛрдИ "рд╕рд┐рдВрдХ рд╕реЗ рдмрд╛рд╣рд░" рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рд╣реИ рдЬрд╣рд╛рдВ рдХреЛрдИ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ "рд╕реНрд░реЛрдд" рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп рдФрд░ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП "рдЧреЗрдЯреЗрдмрд▓ рдЬрд╛рдиреЗ рдпреЛрдЧреНрдп" рдмрдиреЗ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдкреНрд░реЗрд╕реНрдб рдлреЙрд░реНрдо рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВред рдЗрди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛, рд╣рдо рдХреЗрд╡рд▓ рдорд╛рдирдХреАрдХрд░рдг рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд▓рдЧрддрд╛ред
  • рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ embed рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ "рдХреЛрдбреЗрдХ" рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдкреАрдбрд╝рди/рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХрд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЯреВрд▓рдЪреИрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рджреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреЛрдбреЗрдХ рдХреЛ рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╣ рдПрдХреАрдХрд░рдг рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рддрд╛ рд╣реВрдВ
package embed

type Codec interface {
    // Encode transforms a source representation to an in-binary encoded asset.
    Encode(io.Writer, io.Reader) error

    // Decode transforms an in-binary asset to its active representation that the embedded application wants to use.
    Decode(io.Writer, io.Reader) error
}

рдпрд╣ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рд╣реИ:

package main

func NewJSONShrinker() embed.Codec {
   return jsonShrinker{}
}

type jsonShrinker struct{}
func (_ jsonShrinker)  Encode(io.Writer, io.Reader) error {
    // use json.Compact + gzip.Encode...
}
func (_ jsonShrinker)  Decode(io.Writer, io.Reader) error {
    // use gzip.Decode + json.Indent
}

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬреИрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ

// go:embed file.name NewJSONShrinker

func main() {
    embed.NewFileReader("file.name") // codec is implied by the comment above
}

рдпрд╛ рд╕рдВрднрд╡рддрдГ

func main() {
    f, err := embed.NewFileReaderCodec("file.name", NewJSONShrinker())
    ...
}

рджреВрд╕рд░реЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдЬрдЯрд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдЯреВрд▓рдЪреИрди рдХреЛ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдХреЛрдбреЗрдХ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ Encode рдЪрд░рдг рдХрд░рдирд╛ рд╣реИред рддреЛ рд╣рдореЗрдВ рдХрд┐рд╕реА рднреА рдХреЛрдбреЗрдХ рдорд╛рди рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрди рджреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдореИрдЬрд┐рдХ рдХрдореЗрдВрдЯ рдкреНрд▓рд╕ рдХреЛрдбреЗрдХреНрд╕ рдЪреБрдиреВрдВрдЧрд╛ред рдпрд╣ рдПрдХ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рдгрдд рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдпрд╣рд╛рдВ рдмрддрд╛рдП рдЧрдП рд╕рднреА рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рд╛рде рд╣реА, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣рд╛рдВ рдЬрд╛рджреБрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИрдВред рд╣рдо рдЕрднреА рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП go:generate рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рд╣реА рдмрд░реНрджрд╛рд╢реНрдд рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред рдпрджрд┐ рдХреБрдЫ рднреА рд╣реЛ, рддреЛ рдХреЛрдИ рд╡рд░реНрддрдорд╛рди рдореБрд╣рд╛рд╡рд░реЛрдВ рд╕реЗ рдПрдХ рдкреНрд░рд╕реНрдерд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдХреЗрд▓реЗ рдЬрд╛рджреВ рдкреИрдХреЗрдЬ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЧреЛ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдЕрднреА рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдПрдХ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреВрд▓рдЪреИрди рдХреЛ рдирд┐рд░реНрджреЗрд╢ рджреЗрддреА рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЬрд╛рджреБрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЕрднреА import рдХреАрд╡рд░реНрдб рд╣реИред

рдЕрдЧрд░ рд╣рдо рдХрдВрдкреНрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдИ рдХреЛрдбреЗрдХ рдЯрд╛рдЗрдк рдпрд╛ рдХрдВрдкреНрд░реЗрд╢рди рд▓реЗрд╡рд▓ рдиреЙрдмреНрд╕ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдпрд╣реА рд╣реИ, рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдШреБрдВрдбреА рд╣реЛрдирд╛ рд╕рдВрдкреАрдбрд╝рди рдХрд╛ рд╕рдорд░реНрдерди рди рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рддрд░реНрдХ рд╣реИред

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

рд▓реЗрдХрд┐рди рдореИрдВ @rsc рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЖ рдЧрдпрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрд╣рд╕рд╛рд╕ рдХреЗ рдХрд╛рд░рдг рд╕рдВрдкреАрдбрд╝рди рдирд╣реАрдВ рд╣реИ : рдмрд╣реБрдд рд╣реА рд╕рд╛рдордЧреНрд░реА рдЬреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрдХреБрдЪрд┐рдд рд╣реИ (HTML, JS, CSS, рдЖрджрд┐) рд╡рд╣ рд╕рд╛рдордЧреНрд░реА рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЖрдк рдЕрднреА рднреА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд╣реБрдВрдЪ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдХреЗ рд▓рд┐рдП) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░реЛрд╕рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХрд╣реЗрдВ, http.FileServer , рдЬреЛ рд░реЗрдВрдЬ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ)

рдФрд░ рдкрд░рдХреАрдк рдХреЗ рдПрдЪрдЯреАрдПрдордПрд▓/рд╕реАрдПрд╕рдПрд╕/рдЬреЗрдПрд╕ рдХреЗ рд╕рдВрдпреБрдХреНрдд рдЖрдХрд╛рд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдЬрд┐рд╕реЗ рд╣рдо рдПрдореНрдмреЗрдб рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ 48 рдХреЗрдмреА рдЕрд╕рдореНрдкреАрдбрд┐рдд рд╣реИред рдкрд░рдХреАрдк рд╕рд░реНрд╡рд░ рдмрд╛рдЗрдирд░реА 49 рдПрдордмреА рд╣реИред (рдореИрдВ рдПрдореНрдмреЗрдбреЗрдб рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдХреБрдЪрд┐рдд рд╣реИрдВред) рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@rsc рдХреЗ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЙрдкрд░реЛрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХрд╛ рдорд┐рд╢реНрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдкреИрдХреЗрдЬ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ,

package runtime

type Files struct {
     // unexported field(s), at least 1 byte long so Files has a unique address
}

func (f *Files) Open(...) (...) { ...}
func (f *Files) Stat(...) (...) { ...}
func (f *Files) EnumerateSomehow(...) { ...}

рдлрд┐рд░ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ:

package yourcode

//go:embed static/*
//go:embed logo.jpg
var website runtime.Files

func F() {
     ... = website.Open("logo.jpg")
}

рдлрд┐рд░ cmd/go рдЯреВрд▓ go:embed рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрди рдкреИрдЯрд░реНрдиреЛрдВ рдХреЛ рдЧреНрд▓реЛрдм рдХрд░реЗрдЧрд╛ + рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣реИрд╢ рдХрд░реЗрдЧрд╛ рдФрд░ &website рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рд░рдирдЯрд╛рдЗрдо рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдЧрд╛ред

рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдлрд╛рдЗрд▓ рдкрддреЗ рдХрд╛ рдирдХреНрд╢рд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреНрдпрд╛ рд╣реИ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХрд╣рд╛рдВ рд╣реИ (рдпрд╛ рдЙрдирдХреЗ рдИрдПрд▓рдПрдл/рдЖрджрд┐ рдЕрдиреБрднрд╛рдЧ рдирд╛рдо рдХреНрдпрд╛ рд╣реИрдВ)ред рдФрд░ рд╢рд╛рдпрдж рд╡реЗ рд░реИрдВрдбрдо рдПрдХреНрд╕реЗрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рд╣рдо рдХреЛрдИ рдХрдВрдкреНрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВред

@gdamore ,

рдпрд╣рд╛рдВ рдмрд╕ рдПрдХ рдФрд░ рд╢рд┐рдХрди - рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬреЛ рдбреАрдЯреАреНрд░реЗрд╕ рд╕реНрд░реЛрдд рдХреЛрдб (рдПрдореНрдмреЗрдбреЗрдб) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдпрд╣ n рдФрд░ rn рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИред
...
рдпрджрд┐ рд╡рд┐рднрд┐рдиреНрди рдореВрдВрдЧрд┐рдВрдЧ рдЪрд╛рд▓ рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛, рддреЛ рдпрд╣ рдЗрд╕ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рддрд░реНрдХ рд╣реИред

рдЖрдк рдХрд┐рд╕реА рднреА рдХреИрд░рд┐рдЬ рд░рд┐рдЯрд░реНрди рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдирдЯрд╛рдЗрдо рдкрд░ рднреА рдордВрдЧ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рдВрдбреЛрдЬ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдПрдореНрдмреЗрдбреЗрдб рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЗрдВрд╕реНрдЯреЙрд▓ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВред рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐ io.Reader рдПрдХ рджреЛ рдмрд╛рд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВред

рд▓реЗрдХрд┐рди рдореИрдВ @rsc рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЖ рдЧрдпрд╛

рд╕рдВрдкреАрдбрд╝рди рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЕрднрд┐рдЧрдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдп рдирд╣реАрдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреБрдЫ рдЪрд░реНрдЪрд╛ рджреЗрдЦреЗрдВ: https://stackoverflow.com/questions/429987/compression-formats-with-good-support-for-random-access-within-archives

рд╕рдВрдкреАрдбрд╝рди рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЕрднрд┐рдЧрдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдп рдирд╣реАрдВ рд╣реИрдВ

рд╣рд╛рдБ, рдЕрдЧрд░ рд╣рдо рдЪрд╛рд╣рддреЗ рдереЗ рдХрд┐ рдореЛрдЯреЗ рдЕрдирд╛рдЬ рд╡рд╛рд▓реЗ рдХреБрдЫ рдУрд╡рд░рд╣реЗрдб рдХреЗ рд╕рд╛рде рд╕рд╣реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖ рдЬрд╛рдПрдВред рдореИрдВрдиреЗ рдЗрд╕ рд╕реНрдерд╛рди рдореЗрдВ CRFS рдХреЗ stargz рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдУрд╡рд░рд╣реЗрдб рдЗрддрдирд╛ рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рд╕реНрдореГрддрд┐ рдореЗрдВ рдЖрд▓рд╕реА рд░реВрдк рд╕реЗ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рдЗрд╕реЗ рд╕рд┐рдВрдХ рдХреА рддрд░рд╣ рдЬреАрд╕реА рдкрд░ рдЫреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдкреВрд▓), рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдУрд╡рд░рд╣реЗрдб рдЗрддрдирд╛ рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред

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

@bradfitz рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБред рдФрд░ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдореЗрд░реЗ рд░реЗрдкреЛ рдореЗрдВ рдореИрдВрдиреЗ .d рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╕рдордп рдХрдо рд╡рд┐рд╖рд╛рдХреНрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд┐рдЯ рдХреЛ рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИред рдлрд┐рд░ рднреА рдореБрдЭреЗ рдмреИрдХрдХреНрд╡реЙрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдПрдореНрдмреЗрдбреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рд╕рдВрдкрддреНрддрд┐ рдЙрдкрдпреЛрдЧреА рд▓рдЧрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИ рдФрд░ рдЧрд┐рдЯ рдпрд╛ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕рдирдХ рдХреЗ рдЕрдзреАрди рдирд╣реАрдВ рд╣реИред

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

рдореИрдВрдиреЗ рд╡рд╣реА рд▓рдЪреАрд▓рд╛рдкрди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╕реЛрдЪрд╛ рдЬреЛ рдЕрдзрд┐рдХ рд╕реБрдЦрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИред // go:embed рдирд┐рд░реНрджреЗрд╢ рдПрдХ рдХрдорд╛рдВрдб рдЖрдордВрддреНрд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ // go:generate рд╣реИред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдЗрд╕ рддрд░рд╣

// go:embed "file.name" go run example.com/embedders/cat file.name

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

рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ "рдПрдиреНрдХреЛрдб" рдЪрд░рдг рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦрддрд╛ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж "рдбреАрдХреЛрдб" рдЪрд░рдг рдХрд╛ рдХрд╛рд░реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд░рдирдЯрд╛рдЗрдо/рдПрдореНрдмреЗрдб рдкреИрдХреЗрдЬ рдХреЗрд╡рд▓ рдмрд╛рдЗрдЯ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдЯреВрд▓рдЪреЗрди рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рд╣реИ, рдЬреЛ рднреА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╣реИред рдпрд╣ рдареАрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреНрдпрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

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

рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд╣рд▓реВ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдб рдореЗрдВ рдПрдХ рдУрдкрди-рдПрдВрдбреЗрдб рдЪрд░рдг рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдПрдореНрдмреЗрдб рдХреЛ go build рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ go generate рдЬреИрд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЯреВрд▓рдЪреЗрди рдЖрдордВрддреНрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рд╣реИ, рдпрджреНрдпрдкрд┐ред рд╢рд╛рдпрдж рдпрд╣ рдЙрдореНрдореАрдж рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдорд╣рдВрдЧреЗ рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреИрд╢ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░реЗрдЧрд╛, рдпрд╛ рд╢рд╛рдпрдж рдпрд╣ рдЧреЛ рдХреЗ рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреВрд▓рдЪреЗрди рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ go build рдХреЗ рд╕рдордЧреНрд░ рд╡рд┐рд╖рдп рдХреЗ рд╕рд╛рде рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЬреИрд╕реЗ рдореЙрдбреНрдпреВрд▓ рд▓рд╛рдиреЗ)ред

рдХреНрдпрд╛ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдПрдХ рд▓рдХреНрд╖реНрдп рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдЧреЛ рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рдЯреВрд▓рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рди рд╣реА рдЧреЛ: рдЬрдирд░реЗрдЯ рд▓рд╛рдЗрдиреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рд░рд▓ рд░рдЦрдиреЗ рдФрд░ рдХреЗрд╡рд▓ рдмрд╛рдЗрдЯ рд╕реНрд▓рд╛рдЗрд╕ рдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрд╣реБрдд рд╕рд╛рд░реЗ knobs рдХреЗ рд╕рд╛рде рд╕рдВрдкреАрдбрд╝рди рдЪрд╛рд╣рддрд╛ рд╣реИ рддреЛ рд╡реЗ рдЕрдкрдиреА рдореЗрдХ рдлрд╝рд╛рдЗрд▓ (рдпрд╛ рд╕рдорд╛рди) рдореЗрдВ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓рд╛рдЗрди рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ, рдЖрджрд┐ред рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдЬреЛ рднреА рдкрд░рд┐рдгрд╛рдо рд╣реЛ, рдЙрд╕рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд▓рдЧрддрд╛ред

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

@ рд╕реИрдо рд╡реНрд╣рд╛рдЗрдЯ ,

рдХреНрдпрд╛ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдПрдХ рд▓рдХреНрд╖реНрдп рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдЧреЛ рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рдЯреВрд▓рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рди рд╣реА рдЧреЛ: рдЬрдирд░реЗрдЯ рд▓рд╛рдЗрдиреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

рд╣рд╛рдВред

рдпрджрд┐ рд▓реЛрдЧ go:generate рдпрд╛ Makefiles рдпрд╛ рдЕрдиреНрдп рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЙрдирдХреЗ рдкрд╛рд╕ рдЖрдЬ рджрд░реНрдЬрдиреЛрдВ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред

рд╣рдо рдХреБрдЫ рдРрд╕рд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдкреЛрд░реНрдЯреЗрдмрд▓ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рд╕рд╣реА рд╣реЛ рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реЛред (рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП: рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо "рдЧреЛ рдЗрдВрд╕реНрдЯрд╛рд▓" рд╕рдордп рдкрд░ рдордирдорд╛рдирд╛ рдХреЛрдб рдирд╣реАрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрд╕реА рдХрд╛рд░рдг рд╕реЗ рдЧреЛ: рдЬрдирд░реЗрдЯ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдЪрд▓рддрд╛ рд╣реИ)

@ рд╕реНрдЯреАрдлрд╝реЗрдВрд╕ реирекреирек

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдПрдореНрдмреЗрдб рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ "рдХреЛрдбреЗрдХ" рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддреЛ рд╣рдо рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдкреАрдбрд╝рди/рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХрд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЯреВрд▓рдЪреЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рджреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

go build рджреМрд░рд╛рди рдХреЛрдИ рдордирдорд╛рдирд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдирд╣реАрдВред

рдЧреЛ рдмрд┐рд▓реНрдб рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рдордирдорд╛рдирд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдирд╣реАрдВред

рд╣рд╛рдБ, рдореИрдВ рдЗрд╕реЗ рдЕрдм рджреЗрдЦрддрд╛ рд╣реВрдБред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░реЗрдкреЛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рдХреЗрд╡рд▓ "рд╕реНрд░реЛрдд" рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдореЗрдЯрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, "рд╕рдВрд╕рд╛рдзрд┐рдд" рдлрд╛рдЗрд▓реЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдкреИрдХреЗрдЬ рдХреЛ "рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп" рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, _and_ go build рд╕рд░рд▓ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦреЗрдВред рдореИрдВ рдЕрднреА рднреА рдпрд╣рд╛рдВ рдорд╛рдирдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЬреЛрд░ рджреЗ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдХреЗрдХ рд╣реЛрдЧрд╛ рдФрд░ рдореИрдВ рдЗрд╕реЗ рднреА рдЦрд╛рдКрдВрдЧрд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ! рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

@flimzy

рдпрд╣ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреНрдп рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЬреЛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдЙрд╕рдореЗрдВ рдХреЛрдИ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рд╡реЗ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЦреЛрдЬрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рд╕реНрд░реЛрдд рдореЗрдВ рдирд╛рдо рд╕реЗ рдЙрдирдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдП рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдФрд░ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕-рдорд╛рди рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВ рдЙрдирд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рдпрд╛ рддреЛ рдЙрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдпрд╛ *strings.Reader рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдпрд╛рдд рди рдХрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рд╣реЛрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдПрдореНрдмреЗрдб рдкреИрдХреЗрдЬ рдХреЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЧреНрд░рд╕реНрдд рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рднреА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА - рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рдПрдХ рдЧреИрд░-рдирд┐рд░реНрдпрд╛рддрд┐рдд рдкреНрд░рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ), рдЗрд╕рд▓рд┐рдП рдЖрдк рдПрдХ рдЪрд░, рддрд░реНрдХ рдпрд╛ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╛рдкрд╕реА рдХреА рдШреЛрд╖рдгрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдк рдЙрдиреНрд╣реЗрдВ reflect.ValueOf рд╕реНрд╡рдпрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдпрд╣ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ (рдЖрдкрдХреЛ рдЕрднреА рднреА рдЙрдирдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдорд╛рди рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдбреБрдиреЛ рдЕрдЧрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ)ред

рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: embed рдХрд┐рд╕реА рднреА рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдФрд░ рд╕рднреА рдПрдореНрдмреЗрдбреЗрдб рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рдмрдирд╛рдП рдЧрдП рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рдорд╛рдирдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдЕрднреА рднреА рдирд┐рд░рд╛рд╢рд╛рд╡рд╛рджреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ (рдФрд░ рд╕рд░рд▓) рд╣реЛрдЧрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдпрджрд┐ рдЖрдк рдПрдореНрдмреЗрдб-рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде

рджрд░рдЕрд╕рд▓, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдирд┐рд╣рд┐рддрд╛рд░реНрде рдЗрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд╣реИрдВред рдпрджрд┐ FileReaderAt рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╕рдВрдХреЗрдд рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдЕрд╕рдореНрдкреАрдбрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ FileReaderAt () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рдЧреИрд░-рдХреЙрдиреНрд╕реНрдЯ рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрд╕рдореНрдкреАрдбрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЧреИрд░-рдХреЙрдиреНрд╕реНрдЯ рдЗрдирдкреБрдЯ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЛ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ string рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рд╕рд╣реА рдирд╣реАрдВ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐: рдЙрдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЧреИрд░-рдирд┐рд░реНрдпрд╛рддрд┐рдд type filename string рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред рдЗрд╕ рддрд░рд╣, рдРрд╕реА рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдЬреЛ рдмрд┐рдирд╛ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ рдирд╣реАрдВ рд╣реИред

@рдореЗрд░реЛрд╡рд┐рдпрд╕

рдЧреИрд░-рдХреЙрдиреНрд╕реНрдЯ рдЗрдирдкреБрдЯ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдПрдХреНрд╕реЗрд╕рд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдЗрдирдкреБрдЯ (рдпрд╛рдиреА FileReaderAt() ) рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣рдордд рд╣реЛрдВрдЧреЗ рдХрд┐ рдЧреИрд░-рдХреЙрдиреНрд╕реНрдЯ рдЗрдирдкреБрдЯ рд╡рд╣рд╛рдВ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдФрд░ рдореЗрд░рд╛ рдХрд╣рдирд╛ рд╣реИ: рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдордиреЗ 100 рдлрд╛рдЗрд▓реЗрдВ рдПрдореНрдмреЗрдб рдХреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ FileReaderAt(filename) рдХреЙрд▓ рд╣реИ, рдЬрд╣рд╛рдВ filename рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИ; рдпрд╣ рдЬрд╛рдирдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдореНрдмреЗрдбреЗрдб рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдХреМрди рд╕реА (рдпрджрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рд╣реИ) рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХреА рдЬрд╛рдПрдЧреА, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рднреА рдХреЛ рдЕрд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

@flimzy рд╣рдо рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рдереЗ, рдореИрдВрдиреЗ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдЧреИрд░-рдХреЙрдиреНрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╕рдордЭ рдореЗрдВ рдЖрдПрдВрдЧреЗ :) рдЬреЛ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛, рдЧрд▓рдд рдФрд░ рдПрдХ рдирд┐рд░реАрдХреНрд╖рдг рдерд╛ред рдЙрд╕рдХреЗ рд▓рд┐рдП рдорд╛рдлрд╝ рдХрд░рдирд╛ред рдЧреНрд▓реЛрдм рдпрд╛ рд╕рдВрдкреВрд░реНрдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рдЙрди рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛рдПрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рд╣рд╛рдБред рдлрд┐рд░ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐ рд╕рдВрдЧреНрд░рд╣ (рдбреАрдЖрдИрдЖрд░/рдЧреНрд▓реЛрдм) рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдФрд░ рдХреЗрд╡рд▓ рдирд┐рд░рдВрддрд░ рдирд╛рдореЛрдВ рд╕реЗ рдЙрдирдХреЛ рдЪреБрдирдиреЗ рдХреА рдЗрдЬрд╛рдЬрдд рджреЗрдХрд░ - рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛: рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдПрдкреАрдЖрдИ рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдЧреЛ рдЯреВрд▓ рдХреЗ рд▓рд┐рдП рд╕реБрдкрд░ рдЙрдкрдпреБрдХреНрдд рдорд╛рдирддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдЬрд╛рджреВ рд╣реИред рддреЛ рдЗрд╕ рддрд░рд╣ рдорд╛рддрдо рдореЗрдВ рдЬрд╛рдирд╛ рд╢рд╛рдпрдж рдЗрд╕ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрдЧрд╣ рджреЗ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИ :)

рдПрдХ рдФрд░ рдорд╛рдорд▓рд╛ рдЬреЛ рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрд╛ рдерд╛ рдФрд░ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдЧреЛ рдмрд╛рдЗрдирд░реА рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдерд╛, рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЧреЛ рдмрд┐рд▓реНрдб/рдЗрдВрд╕реНрдЯреЙрд▓ (рд╕рд╛рдЭрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реА рд╕рд╛рдЭрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд░реИрдкрд░ рдкреИрдХреЗрдЬ рдХреЛ рдареАрдХ рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрд╕рдВрднрд╡рддрд╛ рдереАред рд╕реНрд░реЛрдд)ред

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

рд╡рд╛рд╣ рд╡рд╛рд╣!!!

@ рдЬреВрд▓рд┐рдпреЛ-рдЧреБрдПрд░рд╛
рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрднреА рднреА рдЙрдиреНрд╣реЗрдВ рдбрд┐рд╕реНрдХ рдкрд░ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдлрд┐рд░ рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП dlopen рдФрд░ dlsym рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЖрдкрдХреА рдкреЛрд╕реНрдЯ рдХреЛ рдереЛрдбрд╝рд╛ рдЧрд▓рдд рд╕рдордЭрд╛, рдмрд╕ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдЖрдк рд╡рд┐рддрд░рдг рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдирд░реА рдмрдирд╛рдиреЗ рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ

http рд╕реНрдерд┐рд░ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд╣рд░, рдПрдореНрдмреЗрдбреЗрдб рдмреНрд▓реЙрдмреНрд╕ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЖрдкрдХреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рдкреЙрдЗрдВрдЯрд░ рдореЗрдВ рдЪрд╛рд╣рд┐рдП, рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рдореЗрдореЛрд░реА рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджреЗред рдЕрдиреНрдпрдерд╛ рдХрд┐рд╕реА рдХреЛ рдирдИ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреА рд╣реЛрдЧреА рдФрд░ io.Reader рд╕реЗ рдПрдХ рдкреНрд░рддрд┐ рдмрдирд╛рдиреА рд╣реЛрдЧреАред рдпрд╣ рджреЛ рдмрд╛рд░ рд╕реНрдореГрддрд┐ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░реЗрдЧрд╛ред

@рдЧреНрд▓рд┐рд╕рд░реАрди , рдлрд┐рд░ рд╕реЗ, рдпрд╣ рдПрдХ string ред рдПрдХ string рдПрдХ рд╕реВрдЪрдХ рдФрд░ рдПрдХ рд▓рдВрдмрд╛рдИ рд╣реИред

рдХреНрдпрд╛ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдЖрдк рдХрд┐рд╕реА рднреА рдлрд╛рдЗрд▓ рдХреЛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрдк рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдЪрд╛рд╣реЗрдВ рддреЛ рдЗрд╕реЗ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЖрдк рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХреБрдЫ рдЧрдгрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдкреНрд░реАрд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

@burka рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдзрд╛рдЧреЗ рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, go build рдордирдорд╛рдирд╛ рдХреЛрдб рдирд╣реАрдВ рдЪрд▓рд╛рдПрдЧрд╛ред

@ рдмреБрд░реНрдХрд╛ , рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред рд╡рд╣ рдирд┐рд░реНрдгрдп (рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдХреЛрдИ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдирд╣реАрдВ) рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдпрд╣ рдЙрд╕ рдиреАрддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдЧ рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдПрдХ рджреБрд╖реНрдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реИ рдХрд┐ рдЧреЛ рдкреНрд░реЙрдХреНрд╕реА рдХрднреА рднреА рдЙрди рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬрд┐рдиреНрд╣реЗрдВ рд╡реЗ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВ рдХреЗрд╡рд▓ рдЧреЛ рдлрд╛рдЗрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдПред рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдХреЛ рдПрдХ рд╕рдВрдкреВрд░реНрдг рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдЧреЛ рдХреЛрдб рдХрд┐рд╕реА рднреА рдЧреИрд░-рдЧреЛ рдлрд╛рдЗрд▓ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдкреНрд░реЙрдХреНрд╕реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рджрд┐рди рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╡реЗ рдЪрд╛рд╣реЗрдВред

@leighmcculloch рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдЬ рднреА рдРрд╕рд╛ рд╣реА рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ред рдЧреЛ рдкреИрдХреЗрдЬ рдореЗрдВ рд╕рднреА рдЧреИрд░-рдЧреЛ рдлрд╝рд╛рдЗрд▓реЗрдВ рдореЙрдбреНрдпреВрд▓ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ go test рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдПрдХ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реАрдЬреАрдУ рдХреЗ рд▓рд┐рдП рд╕реА рдлрд╛рдЗрд▓реЗрдВ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

рдпрд╣ рдПрдХ рд░реЛрдорд╛рдВрдЪрдХ рджрд┐рд╢рд╛ рд╣реИ, рд╣рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

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

рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорджрджрдЧрд╛рд░ рд╣реЛ - рдЕрдЧрд░ рд╣рдо рдлрд╝рд╛рдЗрд▓ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЪреБрдиреМрддрд┐рдпреЛрдВ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░рд╛ рдкреНрд░рд╛рдердорд┐рдХ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ HTML + CSS + JS + JPG + рдЖрджрд┐ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рд╣реИ рддрд╛рдХрд┐ рдЬрдм рдЧреЛ рдРрдк рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдП рддреЛ рдпрд╣ рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд▓рд┐рдЦ рд╕рдХреЗ рдЬреИрд╕реЗ рдХрд┐ рдЙрдиреНрд╣реЗрдВ http.FileServer рджреНрд╡рд╛рд░рд╛ рдкрд░реЛрд╕рд╛ рдЬрд╛ рд╕рдХреЗред . рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВрдиреЗ рдкрд╛рдардХреЛрдВ рдФрд░ рд▓реЗрдЦрдХреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реБрдП рдкрдврд╝реА рдЧрдИ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдореЗрд░реЗ рд▓рд┐рдП рд╡рд┐рджреЗрд╢реА рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЧреЛ рд╕реЗ рдлрд╛рдЗрд▓реЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдХреЗрд╡рд▓ go-bindata рдЙрдиреНрд╣реЗрдВ рдбрд┐рд╕реНрдХ рдкрд░ рдХреЙрдкреА рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВ _(рдпрджреНрдпрдкрд┐ рд╢рд╛рдпрдж рдмреЗрд╣рддрд░ рддрдХрдиреАрдХреЛрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЕрднреА рддрдХ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред)_

рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реА рдЪреБрдиреМрддрд┐рдпрд╛рдБ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ: рд╣рдо рдЖрдо рддреМрд░ рдкрд░ рдЕрдкрдиреЗ рдбрд┐рдмрдЧрд░ рдХреЗ рд╕рд╛рде GoLand рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд▓рдЧрд╛рддрд╛рд░ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реБрдП рд╡реЗрдм рдРрдк рдкрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рд╣рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реАрдзреЗ рд╣рдорд╛рд░реА рд╕реНрд░реЛрдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП http.FileServer рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдРрдк http.FileServer рдЪрд▓рддрд╛ рд╣реИ рддреЛ рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд╣рд╛рдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╕рдорд╛рдзрд╛рди рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЬрдм рд╣рдо рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреЛ-рдмрд┐рдВрджрд╛рдЯрд╛ рдЪрд▓рд╛рдирд╛ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдЧрд┐рдЯ рдореЗрдВ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рд╕рдм рдЖрдо рддреМрд░ рдкрд░ go-bindata рд╕рд╛рде рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЕрдиреНрдп рд╕рдордп рдореЗрдВ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рдВрдХрд▓рд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЪрд▓ рд░рд╣реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдПрдХ рдбрд┐рдмрдЧрд░ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рднреА рдЙрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕реНрд░реЛрдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдлрд╝рд╛рдЗрд▓реЗрдВ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рди рдХрд┐ рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдЬрд╣рд╛рдБ рдПрдореНрдмреЗрдбреЗрдб рдлрд╝рд╛рдЗрд▓ go-bindata рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИ

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

рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рд┐рдо рдзрдиреНрдпрд╡рд╛рджред

рдЪреВрдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рджреЗрдЦрддрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рд╣рдорд╛рд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рднреА рдЗрд╕рдХрд╛ рд▓рд╛рдн рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рд╣рдо template.ParseFiles рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВред

рдореБрдЭреЗ go.mod рдорд╛рдзреНрдпрдо рд╕реЗ рдЪреБрдирдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд╛рдл рддрд░реАрдХрд╛ рдорд┐рд▓реЗрдЧрд╛ред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдпрд╣ рдкрд┐рдЫрдбрд╝рд╛ рд╕рдВрдЧрдд рдерд╛ (рдХреНрдпреЛрдВрдХрд┐ рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкреНрдЯ-рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛) рдФрд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди рд╕реА рдлрд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЯреВрд▓рд┐рдВрдЧ (рдЬреИрд╕реЗ рдЧреЛ рдкреНрд░реЙрдХреНрд╕реА) рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред go mod init рдХрдорд╛рдВрдб рдХреЛ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХреЗред

рдореИрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдорд╛рдирдХ рдирд╛рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ (рдпрджрд┐ рд╣рдореЗрдВ рдСрдкреНрдЯ-рдЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдпрд╣ рдПрдХ рдХреНрд▓реАрдирд░/рд╕рд░рд▓ рдирд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдирд╛рдо go.mod рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдирд╛рдо рдЪреБрдиреЗрдВ (рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ go mod init рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рд╕рдорд╛рдзрд╛рди рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА рдФрд░ рдХрдо "рдЬрд╛рджреВ" рдореЗрдВ рд╕рдВрддреБрд▓рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

@jayconrod рдиреЗ рд▓рд┐рдЦрд╛:

рдПрдХ рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╛рдо (рд╕реНрдерд┐рд░ /) рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдкреНрд░рдЬреНрдЮрд╛ (//go: рдПрдореНрдмреЗрдб) рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдПрдХ рддрд░реНрдХ: рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд╣рдореЗрдВ рдПрдХ рдкреИрдХреЗрдЬ (рдпрд╛ xtest рд╕рдВрдЧреНрд░рд╣) рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рджреЗрддреА рд╣реИ рд▓реЗрдХрд┐рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╣реАрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрдВрддрд░реНрдЧрддред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрд╡рд▓реЛрдХрди рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдЧрд░ рд╣рдо рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╛рдо рдХреЗ рд╕рд╛рде рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рдкрд░рд┐рдЪрд┐рдд рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: static рд╕рднреА рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП, static_test рдкрд░реАрдХреНрд╖рдг рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП, static_amd64 amd64 рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП, рдФрд░ рдЬрд▓реНрдж рд╣реАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдмрд┐рд▓реНрдб рдЯреИрдЧ рд╕рдорд░реНрдерди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред

рд╕реНрдерд┐рд░ рдбреАрдЖрдИрдЖрд░ рдореЗрдВ рдПрдХ рдореЗрдирд┐рдлреЗрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдЦрд╛рд▓реА рдореИрдирд┐рдлреЗрд╕реНрдЯ рджрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореЗрдВ рдореИрдирд┐рдлреЗрд╕реНрдЯ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдмрдХреБрдЫ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ) рдЬрд┐рд╕рдореЗрдВ рдЧреНрд▓рдмреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдмрд┐рд▓реНрдб рдЯреИрдЧ рдФрд░ рд╢рд╛рдпрдж рдмрд╛рдж рдореЗрдВ рд╕рдВрдкреАрдбрд╝рди рдЗрддреНрдпрд╛рджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдПрдХ рдЙрд▓реНрдЯрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЧреЛ рд╕реВрдЪреА рдПрдХ рдореИрдирд┐рдлреЗрд╕реНрдЯ рд╡рд╛рд▓реЗ рдбреАрдЖрдИрдЖрд░ рдХреЛ рд╣рд┐рдЯ рдХрд░рддреА рд╣реИ рддреЛ рд╡рд╣ рдЙрд╕ рдкреЗрдбрд╝ рдХреЛ рд▓рд╛ # 30058 . рдЫреЛрдбрд╝ рд╕рдХрддреА рд╣реИ

рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд╣рд▓реВ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрд╣реБрдд рд╣реА htacces рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдзрдиреНрдпрд╡рд╛рдж рдирд╣реАрдВ

рдкреИрдХреЗрдЬ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдВрдбрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╢реВрдиреНрдп-рдШреБрдВрдбреА рддрдВрддреНрд░ рдПрдХ рдкреИрдХреЗрдЬ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ go.files рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдореЙрдбреНрдпреВрд▓ рдореЗрдВ go.mod рд╕рдорд╛рди)ред рдПрдХреНрд╕реЗрд╕ рдЙрд╕ рдкреИрдХреЗрдЬ рддрдХ рд╣реА рд╕реАрдорд┐рдд рд░рд╣реЗрдЧрд╛, рдЬрдм рддрдХ рдХрд┐ рд╡рд╣ рдХрд┐рд╕реА рдкреНрд░рддреАрдХ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдЪреБрдирддрд╛ред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдПрдХрд▓-рдлрд╝рдВрдХреНрд╢рди runtime/files рдкреНрд░рд╕реНрддрд╛рд╡:

package files

func Open(name string) (io.ReadCloser, error) {
    // runtime opens embedded file based on caller package
    return rc, nil
}
package foo

import "runtime/files"

func ReadPackageFile(name string) ([]byte, error) {
    rc, err := files.Open(name)
    if err != nil {
        return nil, err
    }
    defer rc.Close()
    return ioutil.ReadAll(rc)
}

import "C" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "рдЬрд╛рджреВ" рдЖрдпрд╛рдд рдкрде рдХреЗ рд▓рд┐рдП рдПрдХ рдорд┐рд╕рд╛рд▓ рдХрд╛рдпрдо рдХреА рд╣реИред IMO рдЗрд╕рдиреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рджреЗрдЦрддрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рд╣рдорд╛рд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рднреА рдЗрд╕рдХрд╛ рд▓рд╛рдн рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рд╣рдо template.ParseFiles рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдПрдореНрдмреЗрдбреЗрдб рд╕рдВрд╕рд╛рдзрди рдХреЛ 'рдирд┐рд░реНрдпрд╛рдд' рдФрд░ 'рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд' рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдбреЗрд╡рд▓рдкрд░ рддрдм рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреБрдЫ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред

рдпрд╣ рд╕рдм, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╣реЛрдЧрд╛ рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рддреИрдирд╛рддреА рдХреЛ рдЖрд╕рд╛рди рдХрд░реЗрдЧрд╛ред

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

рдореИрдВ рдмрд╕ рдЬрд▓реНрджреА рд╕реЗ рдЕрдкрдирд╛ рдкрд╕рдВрджреАрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рдПрдХ рдЬрд╛рджреБрдИ рдЯрд┐рдкреНрдкрдгреА рдЬреИрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрдХреЗрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрдЬрд╛рдп, рдПрдореНрдмреЗрдбреЗрдб рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд╛рдиреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдЪрд┐рдд, рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛, рд╕рдВрднрд╡рддрдГ runtime/embed рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рдХрд░реЗрдЧрд╛ рдФрд░ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЖрд╕рд╛рди рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рддрд░рд╣ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореБрдЭреЗ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рд╕рдордЭ рдореЗрдВ рдЖрдПрдЧрд╛:

type EmbedPackage interface {
    Bytes(filename string) []bytes
    BytesCompressed(filename string, config interface{}) []bytes // compressed in-binary as configured by some kind of config struct, memoizes decompression during runtime on first access
    Reader(filename string) io.Reader
    File(filename string) os.File // readonly and contains all metadata
    Dir(filepath string) []os.File 
    Glob(pattern string) []os.File // like filepath.Glob()

    // maybe? this could allow to load JSON, YAML, INI, TOML, etc files more easily
    // but would probably be too much for the std lib implementation
    Unmarshal(filename string, config interface{}, ptr interface{}) 
}

рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ рднреА рдЙрд╕ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдХрд▓рдХ рдХреЛ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдореНрдмреЗрдб рдХрд░рдХреЗ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

// embed a file that is compressed in-binary and automatically decompressed on first access
var LongText = embed.BytesCompressed("legal.html", embed.Config{ Compression: "gzip", CompressionLevel: "9" })

// loads a single file as reader for easy access
var FewLinesOfText = bufio.NewReader(embed.Reader("lines.txt"))
for _, line := range FewLinesOfText.ReadLines() { ... }

// embeds all files in the directory
var PdfFontFiles = embed.Dir("/fonts")

// unmarshals file into custom config
var PdfProcessingConfig MyPdfProcessingConfig
embed.Unmarshal("/pdf_conversion.json", embed.Config{ Encoding: "text/json" }, &PdfProcessingConfig)

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

рд╕рдВрдХрд▓рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдлрд╝рд╛рдЗрд▓реЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рдиреЗ рдкрд░ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреАред

рдмрд╛рдЗрдирд░реА рдХреЗ рдкреАрдЫреЗ рдПрдХ рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ, рддрд╛рдХрд┐ рдпрд╣ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рд╕реНрд╡рдпрдВ рдирд┐рдХрд╛рд▓рдиреЗ рд╡рд╛рд▓рд╛ рдмрд╛рдЗрдирд░реА рдмрди рд╕рдХреЗред рд╢рд╛рдпрдж рдпрд╣ рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИ? рдЗрд╕реЗ рдпрд╣рд╛рдБ рдПрдХ рдкреНрд░рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛: https://github.com/sanderhahn/gozip

рдЧреЛ рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "рдЯреЗрд╕реНрдЯрдбреЗрдЯрд╛" рд╣реИред рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдЬреЛ рдХреБрдЫ рднреА рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдорд┐рдд рдЖрдИрдУ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЯреЗрд╕реНрдЯ рд╕реНрдХреЛрдк рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рд╛рдордЧреНрд░реА рд╢рд┐рдк рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИред рдмрд╕ рдЗрддрдирд╛ рд╣реА рдЬрд╛рдирдирд╛ рд╣реИ, рдХреЛрдИ рддрд╛рдордЭрд╛рдо рдирд╣реАрдВ, рдХреЛрдИ рдЬрд╛рджреВ рдирд╣реАрдВ, рдХреЛрдИ рд╕рдВрдХреБрдЪрд┐рдд рдХрдВрдЯреЗрдирд░ рддрд░реНрдХ рдирд╣реАрдВ, рдХреЛрдИ рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рд╕рдВрдХреЗрдд рдирд╣реАрдВ, рдХреЛрдИ рдореЗрдЯрд╛-рдЖрдИрдПрдирдПрдл рдирд╣реАрдВред рд╕реБрдВрджрд░, рд╕рд░рд▓, рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдгред рдмрдВрдбрд▓ рд░рдирдЯрд╛рдЗрдо рд╕реНрдХреЛрдк рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП "рдбреЗрдЯрд╛" рдлрд╝реЛрд▓реНрдбрд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?

рд╣рдо рдЬреАрдердм рдИрдП рдореЗрдВ рдореМрдЬреВрджрд╛ рдЧреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрдХреИрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "рдбреЗрдЯрд╛" рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдПрдХ рдФрд░ рдмрд╛рдд рдЬреЛ рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред static рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП 100% рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рд╣рдо static _source_ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛, рдпрд╛ static рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдлрд╛рдЗрд▓реЗрдВ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдИ рдЬрд╛рдПрдВрдЧреА _at рд░рдирдЯрд╛рдЗрдо_ ?

рдФрд░ рдпрд╣ рднреЗрдж рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЛрдб рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдЬреЛ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╣реИред

@mikeschinkel рдпрд╣ рдореВрд▓ рдкреЛрд╕реНрдЯ рд╕реЗ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рд╣реЛрдЧреА:

go install / go build рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд░реЗрдВ

рдореВрд▓ рдкреЛрд╕реНрдЯ, рдФрд░ рдКрдкрд░ рджреА рдЧрдИ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ, рд░рди-рдЯрд╛рдЗрдо рдкрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рджреЗрд╡" рдореЛрдб рд╣реЛрдиреЗ рдкрд░ рднреА рдЪрд░реНрдЪрд╛ рдХрд░рддреА рд╣реИрдВред

@mvdan рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рддреЛ рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд /static/ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдРрдк рд░реЗрдкреЛ, рдкреИрдХреЗрдЬ рд░реЗрдкреЛ, рдФрд░/рдпрд╛ рд╕рдВрднрд╡рддрдГ рджреЛрдиреЛрдВ рдХреА рдЬрдбрд╝ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдЧреА?

рдФрд░ рд░рдирдЯрд╛рдЗрдо рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд╣ рд╕реНрдерд╛рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдЙрдиреНрд╣реЗрдВ рдХрд╣рд╛рдБ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ?

рдпрджрд┐ рдпрд╣ рд╕рдм рд╕рдЪ рд╣реИ - рдФрд░ рдпрд╣ рддрд╛рд░реНрдХрд┐рдХ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ - рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ рдХрд┐ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрддрд┐рд░рд┐рдХреНрдд - рдФрд░ рдЧреИрд░-рдорд╛рдирдХ - рддрд░реНрдХ рдФрд░ рдХреЛрдб рдХреЗ рдмрд┐рдирд╛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд░реЛрдд рд╕реНрдерд╛рди рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрдкрд░реНрдпреБрдХреНрдд рдореЙрдбреНрдпреВрд▓ рдкрд░рджреЗ рдХреЗ рдкреАрдЫреЗ рдХреБрдЫ рд▓реЛрдЧред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдлреАрдЪрд░ рдХреЗ рдЕрдЪреНрдЫреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмреЗрд╣рддрд░реАрди рд▓рд┐рдЯрдорд╕ рдЯреЗрд╕реНрдЯ рд╣реИред

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

рд▓реЛрдЧреЛрдВ рдиреЗ рдПрдХ рдСрдкреНрдЯ-рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ go.mod рдХрд╛ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ред

рд╡рд┐рдЪрд╛рд░: go.mod рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛? рдЕрдиреНрдп рдЯреВрд▓реНрд╕ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред

module github.com/foo/bar

data internal/static ./static/*.tmpl.html

рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдПрдХ рдкреИрдХреЗрдЬ рддреИрдпрд╛рд░ рдХрд░реЗрдЧрд╛ред рдЧреНрд▓реЛрдм рд╕рд┐рдВрдЯреИрдХреНрд╕ рдпрд╣рд╛рдВ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рд╕рд░рд▓реАрдХрд░рдг рдФрд░ рдХреЗрд╡рд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рд╣реА рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИред (рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛: ** рдЧреНрд▓реЛрдм рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП +1ред)

import "github.com/foo/bar/internal/static"

f, err := static.Open("static/templates/foo.tmpl")

рд╕реНрдЯреНрд░рд┐рдкрдкреНрд░рд┐рдлрд╝рд┐рдХреНрд╕ рдЬреИрд╕рд╛ рдХреБрдЫ рдпрд╣рд╛рдБ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдПрдХ рд░реИрдкрд░ рдкреИрдХреЗрдЬ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдЗрдЪреНрдЫрд┐рдд рдлрд╝рд╛рдЗрд▓ рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕реЗ рдФрд░ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

module github.com/foo/bar

data ./static/*.tmpl.html
import "runtime/moddata"

moddata.Open("static/foo.tmpl")

рд▓реЗрдХрд┐рди рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рд╣реИ рдХрд┐ рдХреЙрд▓рд┐рдВрдЧ рдкреИрдХреЗрдЬ/рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореЛрдбрдбрд╛рдЯрд╛ рдХрд╛ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рдмрдирд╛ рджреЗрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, http.Filesystem рдХрдирд╡рд░реНрдЯрд░)

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

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ рдЦрд╛рд╕ рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕реА-рдХреЛрдб рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреЗрдбрд╝ рдореЗрдВ рдХрд┐рд╕реА рднреА рдлрд╛рдЗрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдореЙрдбреНрдпреВрд▓ рдкреНрд░реЙрдХреНрд╕реА рдЬреЛ рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЙрд╕реЗ рд╕реА рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░, рд╣рдо рдЬреЛ рднреА рдЬрд╛рджреБрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдпрд╛ рдПрдкреАрдЖрдИ рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдПрдХ рдЫреЛрдЯрд╛ рдХрджрдо рд╣реЛрдЧрд╛ред

рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреБрдЫ рдбрд┐рдЬрд╝рд╛рдЗрдиреЛрдВ рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдкреНрд░реЙрдХреНрд╕реА рдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреМрди рд╕реА рд╕реНрдерд┐рд░ рдлрд╛рдЗрд▓реЗрдВ рднреА рд╢рд╛рдорд┐рд▓ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

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

рдореИрдВ рдЗрд╕ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдкрд░ рдЕрдкрдиреЗ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдХреБрдЫ рдареЛрд╕ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП @broady рдиреЗ рдЬреЛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ, embed рд╕рдВрдЬреНрдЮрд╛ рдХреЗ рдмрдЬрд╛рдп data ред

  1. рдПрдВрдмреЗрдбреЗрдб рдлрд╛рдЗрд▓реЗрдВ рдХреБрдЫ рдРрд╕реА рд▓рдЧрддреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдмрдирд╛рдо рд╕рд┐рд░реНрдл рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЯрд┐рдкреНрдкрдгреА рдпрд╛ рдПрдХ рдЬрд╛рджреВ рдкреИрдХреЗрдЬред рдФрд░ рдПрдХ рдЧреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ, go.mod рдлрд╝рд╛рдЗрд▓ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓/рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

  2. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдореНрдмреЗрдбреЗрдб рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЕрдзрд┐рдХ рдореВрд▓реНрдпрд╡рд╛рди рдФрд░ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд╣реЛрдВрдЧреЗ рдпрджрд┐ рдПрдХ рдкреИрдХреЗрдЬ рдЬрд┐рд╕реЗ рдПрдХ-рдСрдл рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдХреБрдЫ рддрджрд░реНрде рдХреЗ рдмрдЬрд╛рдп рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдПрдореНрдмреЗрдб рдХреЛ рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рддреЛ рд▓реЛрдЧ рдЬреАрдердм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдФрд░ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рдереЗ рдФрд░ рдЕрдиреНрдп рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рдереЗред GitHub рдкрд░ рд╕рдореБрджрд╛рдп-рд░рдЦрд░рдЦрд╛рд╡ рдФрд░ рдлреНрд░реА-рдЯреВ-рдпреВрдЬрд╝ рдкреИрдХреЗрдЬ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

    рдПред рдЙрди рджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓реЗрдВ рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрд╕ рджреЗрд╢ рдХреЗ рд╕рднреА рдкреЛрд╕реНрдЯрд▓ рдХреЛрдб рд╣реЛрддреЗ рд╣реИрдВ,
    рдмреАред рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рд╕рднреА рдЬреНрдЮрд╛рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдПрдЬреЗрдВрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╡рд╛рд▓реА рдПрдХ рдлрд╝рд╛рдЗрд▓,
    рд╕реАред рджреБрдирд┐рдпрд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рджреЗрд╢ рдХреЗ рд▓рд┐рдП рдзреНрд╡рдЬ рдХреА рдЫрд╡рд┐рдпрд╛рдВ,
    рдбреАред рдЧреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЧрд╣рди рд╕рд╣рд╛рдпрддрд╛ рдЬрд╛рдирдХрд╛рд░реА,
    рдЗред рдФрд░ рдЗрд╕реА рддрд░рд╣...

  3. рдПрдХ рдирдИ URL рдпреЛрдЬрдирд╛ рдЬреИрд╕реЗ goembed:// - рдпрд╛ рд╢рд╛рдпрдж рдПрдХ рдореМрдЬреВрджрд╛ - рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреИрдХреЗрдЬ рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЦреЛрд▓рдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ _(all?)_ рдореМрдЬреВрджрд╛ рдлрд╝рд╛рдЗрд▓ рд╣реЗрд░рдлреЗрд░ рдПрдкреАрдЖрдИ рдХреЛ рдирдП рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд▓реАрд╡рд░реЗрдЬ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ones, рдирд┐рдореНрди рдЬреИрд╕рд╛ рдХреБрдЫ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдкреИрдХреЗрдЬ рдореЗрдВ рдирд┐рд╣рд┐рдд рдПрдореНрдмреЗрдб рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╣реЛрдЧрд╛:

    data, err := ioutil.ReadFile("goembed://postal-codes.txt")    
    if (err != nil) {
      fmt.Println(err)
    }
    

рдЙрдкрд░реЛрдХреНрдд рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рд╕рд╛рде, _"рдЬрд╛рджреВ"_ рдЬреИрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд▓рдЧрддрд╛; рд╕рдм рдХреБрдЫ рдПрдХ рддрдВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдРрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдерд╛ред рдмрд╣реБрдд рдХрдо рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА; go.mod рдореЗрдВ рдПрдХ рдирдИ рдХреНрд░рд┐рдпрд╛ рдФрд░ рдПрдХ рдирдИ URL рдпреЛрдЬрдирд╛ рдЬрд┐рд╕реЗ рдЧреЛ рджреНрд╡рд╛рд░рд╛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рд╡реИрд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛-рдЬреИрд╕рд╛ рдХрд┐ рдЧреЛ рдХреА рдУрд░ рд╕реЗ рд╣реИред

рдореИрдВ рдЕрднреА рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реВрдВ

рдореИрдВ рдЕрднреА рдЗрд╕рдХреЗ рд▓рд┐рдП code.soquee.net/pkgzip рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ (рдпрд╣ statik рдХрд╛ рдПрдХ рдХрд╛рдВрдЯрд╛ рд╣реИ рдЬреЛ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрдЪрдиреЗ рдФрд░ рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ)ред рдореЗрд░рд╛ рд╕рд╛рдорд╛рдиреНрдп рд╡рд░реНрдХрдлрд╝реНрд▓реЛ (рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╡реЗрдм рдРрдк рдореЗрдВ) рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрдВрдбрд▓ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рд╣реИ рдФрд░ рдлрд┐рд░ golang.org/x/tools/godoc/vfs/zipfs рдФрд░ golang.org/x/tools/godoc/vfs/httpfs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдирдХреА рд╕реЗрд╡рд╛ рдХрд░рдирд╛ рд╣реИред

рдЬрд╛рдУ: рдПрдореНрдмреЗрдб рджреГрд╖реНрдЯрд┐рдХреЛрдг

рджреЛ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ go:embed рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдкрдирд╛рдиреЗ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд░реЛрдХреЗрдВрдЧреА:

  1. рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдЧрд╛
  2. рд╕рдВрдкрддреНрддрд┐ рдкреВрд░реЗ рдХреЛрдб рдЖрдзрд╛рд░ рдкрд░ рдмрд┐рдЦрд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ (рдпрд╣ рдмрд╛рд╣рд░реА рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ go:generate рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕рдЪ рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЖрдо рддреМрд░ рдкрд░ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдХрдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдлрд┐рд░ рдореИрдВ рдореЗрдХрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрди рд╕рднреА рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ)

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

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

import "forkaweso.me/forkawesome/v2"

рдПрдореНрдмреЗрдб рдкреИрдХреЗрдЬ рджреГрд╖реНрдЯрд┐рдХреЛрдг

рдЬрдмрдХрд┐ рдореБрдЭреЗ рдпрд╣ рд╕рдм рд╕реНрдкрд╖реНрдЯ, рд╕рд╛рдорд╛рдиреНрдп рдЧреЛ рдХреЛрдб рд╣реЛрдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ, рдореБрдЭреЗ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдирдлрд░рдд рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдФрд░ рдЬрд╛рджреВ рдкреИрдХреЗрдЬ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдмрд╛рд╣рд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

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

рд╣рд╛рдЗрдмреНрд░рд┐рдб

рдореБрдЭреЗ рд╣рд╛рдЗрдмреНрд░рд┐рдб рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп (рдЬреЛ рдЕрдВрдд рдореЗрдВ рд╕рднреА рдЬрдЧрд╣ рдмрд┐рдЦрд░реА рд╣реБрдИ рд╣реИрдВ, рдФрд░, рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдиреЛрдЯ рдкрд░, рдмрд╕ рд╕рдХрд▓ рд▓рдЧрддрд╛ рд╣реИ), рдореИрдВ рд╕рднреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╕рдВрднрд╡рддрдГ go.mod рдлрд╝рд╛рдЗрд▓ рдЕрдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╣ рдЪреБрдХрд╛:

module forkaweso.me/forkawesome/v2

go 1.15

embed (
    fonts/forkawesome-webfont.ttf
    fonts/forkawesome-webfont.woff2
)

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдП рдмрд┐рдирд╛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдЯреИрдЧ, рдпрд╛ рдордирдорд╛рдиреЗ рдкреИрдХреЗрдЬ (рдЬреИрд╕реЗ _testing рдкреИрдХреЗрдЬ) рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдпрд╛ рдмрд╣рд┐рд╖реНрдХреГрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдЯрд┐рд▓рддрд╛ рдореЗрдВ рдпрд╣ рдХрдореА рд╡рд╛рдВрдЫрдиреАрдп рд╣реЛ рд╕рдХрддреА рд╣реИ (рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХреЛрдИ рдмрд┐рд▓реНрдб рдЯреИрдЧ рдЫрд┐рдкрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдпрд╣ рдирд╣реАрдВ рд╕рдордЭ рд╕рдХрддреЗ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рд╣реА рд╕рдВрдкрддреНрддрд┐ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдЗрд╕реЗ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛) , рд▓реЗрдХрд┐рди рд╡рд╛рдИрдПрдордПрдорд╡реАред рдпрджрд┐ рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ, рддреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрднреА рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╡реЗ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрд╕реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ go.mod рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реВрдВред

рдореВрд▓ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╡рд┐рдкрд░реАрдд рдпрд╣ рдХреЛрдИ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ред рдИрдПрд▓рдПрдл рдлрд╝рд╛рдЗрд▓ рдХреЗ рдбреЗрдЯрд╛ рдЕрдиреБрднрд╛рдЧ рдХреЛ рдкрдврд╝рдирд╛ (рдпрд╛ рдлрд┐рд░ рдпрд╣ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдХрд┐рд╕реА рднреА рдУрдПрд╕ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ) рдЬрд╣рд╛рдВ рдЙрдкрдпреБрдХреНрдд рд╣реЛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП os рдпрд╛ debug/elf , рдЖрджрд┐) рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдлрд┐рд░, рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдПрдХ рдирдпрд╛ рдкреИрдХреЗрдЬ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдУрдкреА рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдкреИрдХреЗрдЬ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЬрд╛рджреВ рд╣реЛрдиреЗ рдФрд░ рдЦреБрдж рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдХреЗрд╡рд▓ рдПрдореНрдмреЗрдбреЗрдб рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ (рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕реЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдмрд╛рд╣рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ рдЪрд╛рд╣рд╛)ред

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

var IconFont = embed.Dir("forkaweso.me/forkawesome/v2/fonts/")
var Logo = embed.File("images/logo.jpg")

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдбрд╛рд▓рдиреЗ рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рд╣реЛрдиреЗ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдЙрд╕ рд╡рд┐рд╢реЗрд╖ рдореЙрдбреНрдпреВрд▓ рддрдХ рд╕реАрдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдкреАрдЖрдИ рдФрд░ рдЖрдк рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЪрдпрди рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдлрд┐рд░ рднреА рдПрдХ рдФрд░ рд╡рд┐рдЪрд╛рд░: embed рдореЗрдВ go.mod рдПрдХ рдирдИ рддрд░рд╣ рдХреА рдХреНрд░рд┐рдпрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреИрдХреЗрдЬ рдкреЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдбреЗрдЯрд╛ рдкреИрдХреЗрдЬ, рдЬреЛ рдЖрдпрд╛рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ go.mod рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ред рдпрд╣рд╛рдБ рдПрдХ рд╕реНрдЯреНрд░реЙ рдореИрди рд╕реНрдХреЗрдЪ рд╣реИред

рдпрджрд┐ рдХрд┐рд╕реА рдкреИрдХреЗрдЬ рдореЗрдВ рдареАрдХ рдПрдХ .go рдлрд╝рд╛рдЗрд▓, static.go , рдФрд░ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЗрд╡рд▓ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдФрд░ рдПрдХ рдкреИрдХреЗрдЬ рдХреНрд▓реЙрдЬрд╝ рд╣реИ, рддреЛ рдПрдХ рдкреИрдХреЗрдЬ рдПрдХ рдбреЗрдЯрд╛ рдкреИрдХреЗрдЬ рд╣реИред рдЬрдм рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ cmd/go рдкреИрдХреЗрдЬ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЙрд╕рдореЗрдВ рдирд┐рд╣рд┐рдд рдлрд╛рдЗрд▓реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкрд░рд┐рдгрд╛рдореА рдмрд╛рдЗрдирд░реА рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рд╣реЛрддреЗ рд╣реИрдВред

рдпрджрд┐ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреИрдХреЗрдЬ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ рдХрд┐ internal рдирд┐рдпрдо рд▓рд╛рдЧреВ рд╣реЛрдВрдЧреЗ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдкреАрдЖрдИ рдХреЛ рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдПрдХреНрд╕реЗрд╕ рдирд┐рдпрдВрддреНрд░рдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рднреА рдЧреИрд░ .go рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдЙрдк рдлрд╝реЛрд▓реНрдбрд░реЛрдВ (рдмрд┐рдирд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП) рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдпрджрд┐ рдХрд┐рд╕реА рдкреИрдХреЗрдЬ рдореЗрдВ рдареАрдХ рдПрдХ .go рдлрд╝рд╛рдЗрд▓, static.go , рдФрд░ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЗрд╡рд▓ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдФрд░ рдПрдХ рдкреИрдХреЗрдЬ рдХреНрд▓реЙрдЬрд╝ рд╣реИ, рддреЛ рдПрдХ рдкреИрдХреЗрдЬ рдПрдХ рдбреЗрдЯрд╛ рдкреИрдХреЗрдЬ рд╣реИред

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

@flimzy
рдпрд╣ рдереЛрдбрд╝реЗ рд╕реЗ рдПрдХ рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдПрдореНрдмреЗрдбреЗрдб рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдФрд░ рдЙрд╕реА fns/vars рдХреЛ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЯреИрдЧ рдХреЗ рд╕рд╛рде (рд╢рд╛рдпрдж рд░рд┐рдореЛрдЯ?)

рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд░реИрдкрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд┐рд▓реНрдб рдлреНрд▓реИрдЧ рдерд╛ рддреЛ рдХрд┐рд╕реА рдХреЛ рдХреЗрд╡рд▓ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рднрд░рдирд╛ рд╣реЛрдЧрд╛ред

@ рдЬреЛрд╢реЗрд░рд┐рдпрди

рдпрджрд┐ рдХрд┐рд╕реА рдкреИрдХреЗрдЬ рдореЗрдВ рдареАрдХ рдПрдХ .go рдлрд╝рд╛рдЗрд▓, static.go , рдФрд░ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЗрд╡рд▓ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдФрд░ рдПрдХ рдкреИрдХреЗрдЬ рдХреНрд▓реЙрдЬрд╝ рд╣реИ, рддреЛ рдПрдХ рдкреИрдХреЗрдЬ рдПрдХ рдбреЗрдЯрд╛ рдкреИрдХреЗрдЬ рд╣реИред

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

рдореИрдВ "рдбреЗрдЯрд╛" рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдЙрдирдХреА рдЕрдкрдиреА рдбреЛрдореЗрди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬреИрд╕реЗ рдХрд┐ рдкреЛрд╕реНрдЯрд▓-рдХреЛрдб рд▓реБрдХрдЕрдкред

рдЖрдк my.pkg/postalcode рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдбреЗрдЯрд╛ рдХреЛ my.pkg/postalcode/data (рдпрд╛ my.pkg/postalcode/internal/data) рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдЗрд╕реЗ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдкреАрд▓ рджреЗрдЦрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдЙрдард╛рддрд╛ рд╣реИ: рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ? рдЖрдк рдбреЗрдЯрд╛ рдкреИрдХреЗрдЬ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреИрд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ? рдпрджрд┐ рдкреИрдХреЗрдЬ рдореЗрдВ рдРрд╕реЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдЙрди cmd/go рдХреЗ рд╕рд╛рде рд╡рд┐рд░реЛрдз рдХрд░реЗрдВрдЧреЗ, рддреЛ рдЖрдк рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ? (рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрдирдХреЗ рдкрд╛рд╕ рдЙрддреНрддрд░ рдирд╣реАрдВ рд╣реИрдВ, рдмрд╕ рдпрд╣ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдЗрдирдХрд╛ рдЙрддреНрддрд░ рди рджрд┐рдпрд╛ рдЬрд╛рдПред)

@ рдЬреЛрд╢реЗрд░рд┐рдпрди , рдХреГрдкрдпрд╛ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЯрд╛рдЗрдк рдЪреЗрдХрд┐рдВрдЧ рдХрдореЗрдВрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ (https://github.com/golang/go/issues/35950#issuecomment-561443566)ред

@bradfitz рд╣рд╛рдБ, рдпрд╣ рдПрдХ рднрд╛рд╖рд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЧреЛ/рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рднрд╛рд╖рд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд┐рдирд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ- static.go рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╢рд░реАрд░-рд░рд╣рд┐рдд рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ cmd/go рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред

рд╢рд░реАрд░-рд░рд╣рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдорд╛рд╣рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП static.go рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдХрд┐ cmd/go рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рдпрд╣ рд╕рднреА embed.File() рдкрдХрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рддрд┐ рдлрд╝рд╛рдЗрд▓ рдлрд╝рдВрдХреНрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЖрд╕рд╛рди рдкреНрд░рддрд┐ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдирд┐рд░реНрдпрд╛рдд рдирд┐рдпрдВрддреНрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рддреЛ рдЙрддреНрдкрдиреНрди рд╕рд╛рдорд╛рди рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

EmbededFoo() embed.Asset {...}
embededBar() embed.Asset {...}

рдПрдХ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореИрдВрдиреЗ 4 рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рд╕реНрдерд┐рд░ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛ред рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ рдЕрдВрддрд┐рдо рд╡рд╛рдХреНрдп рджреЗрдЦреЗрдВ :-)

@ рдЬреЛрд╢реЗрд░рд┐рдпрди

рдЖрдк my.pkg/postalcode рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдбреЗрдЯрд╛ рдХреЛ my.pkg/postalcode/data (рдпрд╛ my.pkg/postalcode/internal/data) рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд╣ - рдЬрдмрдХрд┐ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг - рдореЗрд░реА рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рджреВрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ?

рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдмреАрд╕реА рдХреА рдЪрд┐рдВрддрд╛рдПрдВ рдпрд╣рд╛рдВ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВред рдХреНрдпрд╛ рдЖрдк рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдЖрдк рдбреЗрдЯрд╛ рдкреИрдХреЗрдЬ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреИрд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ?

embed рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд╕рд╛рде go.mod ?

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬреЛ рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВ рдореИрдВ рдЙрд╕рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдЙрд▓рдЯ рджреВрдВрдЧрд╛; рдЖрдк рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЬ рдХреЛ рдХреИрд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ?

рдпрджрд┐ рдкреИрдХреЗрдЬ рдореЗрдВ рдРрд╕реЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдЙрди cmd/go рдХреЗ рд╕рд╛рде рд╡рд┐рд░реЛрдз рдХрд░реЗрдВрдЧреЗ, рддреЛ рдЖрдк рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ?

  1. рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП cmd/go рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

  2. рднрд▓реЗ рд╣реА cmd/go рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ _рдореМрдЬреВрджрд╛_ рдкреИрдХреЗрдЬ рдореЗрдВ рд╡рд┐рд░реЛрдз рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ _undefined_ рд╣реЛрдЧрд╛ред

    рдкреНрд░рд╕реНрддрд╛рд╡ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдПрдХрд▓ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛-рдХреЗрдВрджреНрд░рд┐рдд рдкреИрдХреЗрдЬ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкреИрдХреЗрдЬ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдореМрдЬреВрджрд╛ рддрд░реНрдХ-рдХреЗрдВрджреНрд░рд┐рдд рдкреИрдХреЗрдЬ рдореЗрдВ рдбреЗрдЯрд╛ рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред

    рдмреЗрд╢рдХ рдПрдХ рдбреЗрд╡рд▓рдкрд░ _could_ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдкреИрдХреЗрдЬ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдЧрд╛ред IOW, рдпрджрд┐ рдХреЛрдИ рдбреЗрд╡рд▓рдкрд░ рдореБрд╣рд╛рд╡рд░реЗ рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рддреЛ рд╡реЗ рдЕрдЬреНрдЮрд╛рдд рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣реЛрдВрдЧреЗред

рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрдирдХреЗ рдкрд╛рд╕ рдЙрддреНрддрд░ рдирд╣реАрдВ рд╣реИрдВ, рдмрд╕ рдпрд╣ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдЗрдирдХрд╛ рдЙрддреНрддрд░ рди рджрд┐рдпрд╛ рдЬрд╛рдПред

рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрддреНрддрд░ рд╕рд░рд▓ рд╣реИрдВред рдХрдо рд╕реЗ рдХрдо рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдиреЗ рдЕрдм рддрдХ рдкреЛрдЬ рджрд┐рдпрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреЛрдВ рдпрд╛ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рд╕рдорд╛рдзрд╛рди рдкреИрдХреЗрдЬ рд╕реНрдХреЛрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдореЙрдбреНрдпреВрд▓ рд╕реНрдХреЛрдк рдирд╣реАрдВред рдХреНрдпреЛрдВрдХрд┐ рдЧреЛ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рди рдЗрдХрд╛рдИ рдкреИрдХреЗрдЬ рд╣реИ, рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВред

рддреЛ рдпрд╣ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП go.mod рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред

@dolmen рдпрджрд┐ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдореЗрдВ рд╣реИ, рддреЛ рджрд╛рдпрд░рд╛ рд╕реНрд╡рдпрдВ рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реЛрдЧрд╛ред

@urandom рдирд╣реАрдВ, рджрд╛рдпрд░рд╛ рд╡рд╣ рдкреИрдХреЗрдЬ рд╣реИ рдЬреЛ рдЙрд╕ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдкреИрдХреЗрдЬ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡реИрд╕реЗ рднреА рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдПрдХ рдкреВрд░реНрдг рдЙрддреНрдкрдиреНрди рдкреИрдХреЗрдЬ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реИред

@urandom рдирд╣реАрдВ, рджрд╛рдпрд░рд╛ рд╡рд╣ рдкреИрдХреЗрдЬ рд╣реИ рдЬреЛ рдЙрд╕ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдкреИрдХреЗрдЬ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡реИрд╕реЗ рднреА рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдПрдХ рдкреВрд░реНрдг рдЙрддреНрдкрдиреНрди рдкреИрдХреЗрдЬ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реИред

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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, go.mod рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рддреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ (рдХреЛрдИ рдЬрд╛рджреВ рдЯрд┐рдкреНрдкрдгреА, рдпрд╛ рдЬрд╛рджреВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛) рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд╛рдл рддрд░реАрдХрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред

рдпрд╣рд╛рдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрднреА рддрдХ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдЧреЛ рд╕реЛрд░реНрд╕ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЯреВрд▓реНрд╕ (рдХрдВрдкрд╛рдЗрд▓рд░, рд╕реНрдЯреИрдЯрд┐рдХ рдПрдирд╛рд▓рд╛рдЗрдЬрд░) рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рд░рдирдЯрд╛рдЗрдо рдПрдкреАрдЖрдИ рдЬрд┐рддрдирд╛ рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдкреАрдЖрдИ рдЧреЛ рдХрд╛ рдореБрдЦреНрдп рдореВрд▓реНрдп рд╣реИ рдЬреЛ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ (рдЬреИрд╕реЗ go/ast / go/format рдФрд░ go mod edit )ред

рдЗрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░реА-рдкреНрд░реЛрд╕реЗрд╕рд░ рдЯреВрд▓реНрд╕ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ go:generate рдЪрд░рдгреЛрдВ рдореЗрдВ) рджреНрд╡рд╛рд░рд╛ рдПрдореНрдмреЗрдб рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрджрд░реНрдн рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреИрдХреЗрдЬ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ go.mod рдкрд╛рд░реНрд╕рд┐рдВрдЧ ( go mod рдЯреВрд▓реНрд╕) рдпрд╛ go/ast рдкрд╛рд░реНрд╕рд░ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИред

@ рдбреЛрд▓рдореЗрди

_ "рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рд╕рдорд╛рдзрд╛рди рдЬреЛ рдкреНрд░рддреАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреЛрдВ рдпрд╛ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдкреИрдХреЗрдЬ рд╕реНрдХреЛрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдореЙрдбреНрдпреВрд▓ рд╕реНрдХреЛрдк рдирд╣реАрдВред рдХреНрдпреЛрдВрдХрд┐ рдЧреЛ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рди рдЗрдХрд╛рдИ рдкреИрдХреЗрдЬ рд╣реИ, рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВред рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реВрдЪреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП go.mod рдХреЗ рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓реЗрдВред"_

рдореЙрдбреНрдпреВрд▓ рдХреНрдпрд╛ рд╣реИ? рдореЙрдбреНрдпреВрд▓ _ " рд╕рдВрдмрдВрдзрд┐рдд рдЧреЛ рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ рдЬреЛ рдПрдХ рдЗрдХрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рд╛рде рд╕рдВрд╕реНрдХрд░рдгрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ ред" рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рдкреИрдХреЗрдЬ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдкреИрдХреЗрдЬ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреА рд╕рдВрдкреВрд░реНрдгрддрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЬреИрд╕реЗ, go.mod рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЬрдЧрд╣ рд╣реИ, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЧреЛ рдЯреАрдо рд╡рд┐рд╢реЗрд╖ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рдЬрд╛рджреВ рдкреИрдХреЗрдЬреЛрдВ рдкрд░ go.mod рдХреЛ рдЕрдкрдирд╛рддреА рд╣реИред рдпрд╣ рддрдм рддрдХ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЧреЛ рдЯреАрдо go.pkg рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рдирд╣реАрдВ рд▓реЗрддреАред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЧреЛ рдЯреАрдо рдХреЛ рдПрдореНрдмреЗрдб рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд╕реНрдерд╛рди рдХреЗ рд░реВрдк рдореЗрдВ go.mod рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдерд╛, рддреЛ рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐ рдЬреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЙрд╕реЗ embed рдирд┐рд░реНрджреЗрд╢реЛрдВ рдФрд░ рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде go.mod рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрд┐рд╕реЗ рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ go.mod рдлрд╝рд╛рдЗрд▓ рд░рд╣рддреА рд╣реИ рд╡рд╣ рд╡рд╣ рдкреИрдХреЗрдЬ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реЛрддреА рд╣реИрдВред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рдЪрд╛рд╣рддрд╛ рд╣реИ рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдФрд░ go.mod рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реЗ рдЙрд╕ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдЕрдкрдиреА рдПрдореНрдмреЗрдбреЗрдб рдлрд╛рдЗрд▓реЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдХреЛрдИ рд╡реИрдз рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ рдЬрд┐рд╕рдХреА рдЖрдк рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпреЗ рдмрд╛рдзрд╛рдПрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд╣реАрдВ рд╣реЛрдВрдЧреА?

@mikeschinkel , рдПрдХ рдореЙрдбреНрдпреВрд▓ _рд╕рдВрдмрдВрдзрд┐рдд_ рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рднреАрддрд░ рдЕрдиреНрдп рдкреИрдХреЗрдЬреЛрдВ рдХреА рдЯреНрд░рд╛рдВрдЬрд┐рдЯрд┐рд╡ рдирд┐рд░реНрднрд░рддрд╛ (рдФрд░ рдбреЗрдЯрд╛!) рдХреЛ рдЦреАрдВрдЪреЗ рдмрд┐рдирд╛ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдПрдХ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ (рдФрд░ рдЙрдЪрд┐рдд!)

рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЖрдо рддреМрд░ рдкрд░ рдкреНрд░рддрд┐-рдкреИрдХреЗрдЬ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ, рдкреНрд░рддрд┐-рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВ, рдЗрд╕рд▓рд┐рдП рдЙрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓-рд╕реНрддрд░реАрдп рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

@рдмреАрд╕реАрдорд┐рд▓реНрд╕

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЖрдкрдХреЗ рд╕рдВрджреЗрд╢ рдореЗрдВ 'рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ' рдХреЛ 'рдореЙрдбреНрдпреВрд▓' рд╕реЗ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЕрднреА рднреА рд╕рд╣реА рд░рд╣реЗрдЧрд╛ред
рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╣реЛрдирд╛ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд╣реИред
рдлрд┐рд░ рднреА рд╣рдо рдЙрди рд╕рднреА рдХреЛ рдЧреЛ.рдореЛрдб рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВред

@urandom , go.mod рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рднреА рдкреИрдХреЗрдЬ рдЕрдВрддрд┐рдо рдмрд╛рдЗрдирд░реА рдореЗрдВ рд▓рд┐рдВрдХ рдирд╣реАрдВ рд╣реИрдВред ( go.mod рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдбрд╛рд▓рдирд╛ _not_ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЙрд╕ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред)

рдореЗрдЯрд╛-рдкреЙрдЗрдВрдЯ

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╢реАрд░реНрд╖ рдкрд░ рдмреНрд░реИрдб рдХреА рдореВрд▓ рдЯрд┐рдкреНрдкрдгреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдХреЗрдЪ/рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ/рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдкреВрд░реНрдг рдкреНрд░рд╕реНрддрд╛рд╡ рдХрдо рдереАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрд░реНрдЪрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдмреНрд░реИрдб рдФрд░ рд╢рд╛рдпрдж рдХреБрдЫ рдЕрдиреНрдп рд▓реЛрдЧ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдбрд┐рдЬрд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ рд╕рд╣рдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЙрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ (рдЕрднреА рддрдХ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ) рдбреЙрдХреНрдЯрд░ рдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред . рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдЙрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА рдЬреЛ рдереЛрдбрд╝реА рд▓рдВрдмреА рдмрд╛рддрдЪреАрдд рдмрди рдЧрдИ рд╣реИред

рд╡рд┐рдЪрд╛рд░?

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рддрдм рддрдХ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд-рд╣реЛрд▓реНрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдбрд┐рдЬрд╝рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рди рд╣реЛ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд╛ рд▓реЙрдХ рди рдХрд░реЗрдВред (рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд▓рдЧрднрдЧ рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдмреЗрдорд╛рдиреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВ рдХрд┐ рдЙрдирдХреА рдЯрд┐рдкреНрдкрдгреА рдмреЗрдорд╛рдиреА рд╣реИ рдпрд╛ рдирд╣реАрдВ ...)

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдХреЛрдИ рдбрд┐рдЬрд╝рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реЛ рддреЛ рдЗрд╕реЗ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╛ рдЗрд╕реЗ рдмрдВрдж рдХрд░реЗрдВ рдФрд░ #3035 рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВ (рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрдХрд░) рддрд╛рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЦреБрд▓рд╛ рдореБрджреНрджрд╛ рдЗрд╕реЗ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХреЗред

рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рдареАрдХ рдмрд╛рдж рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдХрд░реАрдмреА рдЪрд░реНрдЪрд╛ @bcmills рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдареАрдХ рдмрд╛рдж рдФрд░ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░ рдкрд╛рддрд╛ред

"_рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдПрдХ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ (рдФрд░ рдЙрдЪрд┐рдд!) рдЙрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рднреАрддрд░ рдЕрдиреНрдп рдкреИрдХреЗрдЬреЛрдВ рдХреА рд╕рдВрдХреНрд░рдордгреАрдп рдирд┐рд░реНрднрд░рддрд╛ (рдФрд░ рдбреЗрдЯрд╛!)

рд╣рд╛рдВ, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рд╕рдВрднрд╡ рд╣реИред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдХреА рддрд░рд╣, рдбреЗрдЯрд╛ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХрд▓ рдкреИрдХреЗрдЬ рдмрдирд╛рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреА рдЪрд┐рдВрддрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд░реВрдЯ рдореЗрдВ go.mod рдФрд░ рдбреЗрдЯрд╛ рдкреИрдХреЗрдЬ рд╡рд╛рд▓реА рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдФрд░ go.mod рд╣реИ, рддреЛ рдРрд╕рд╛ рд╣реА рд╣реЛред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдмрд╛рдд рдХреА рд╡рдХрд╛рд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдпрд╣рд╛рдВ рдЕрдЪреНрдЫреЗ рдХреЗ рджреБрд╢реНрдорди рдирд╣реАрдВ рдмрдирддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЕрдЪреНрдЫрд╛ рдпрд╣рд╛рдВ go.mod рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдореНрдмреЗрдб рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджрд░реНрд╢ рд╕реНрдерд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреА рдкреНрд░рдХреГрддрд┐ рд╕реЗ рд╡реЗ рдПрдХ рд╕реВрдЪреА рд╣реИрдВ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдШрдЯрдХред

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

рдпрд╣ рдЬрд╣рд╛рдВ рднреА рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд╣рд╛рдВ рд╕рднреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЧреЛ рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдореНрдмреЗрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рди рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкреИрдЯрд░реНрди)ред

рдЬрдм рддрдХ рдмреНрд░реИрдб рдФрд░ рдЕрдиреНрдп рдПрдХ рдФрдкрдЪрд╛рд░рд┐рдХ рдбрд┐рдЬрд╝рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рддреИрдпрд╛рд░ рдирд╣реАрдВ рдХрд░ рд▓реЗрддреЗ, рддрдм рддрдХ рд╣реЛрд▓реНрдб рдкрд░ рд░рдЦреЗрдВред

рдХреБрдЫ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк static рдпрд╛ embed рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╕рд┐рдореНрд▓рд┐рдВрдХ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд╣рд░ рдХреБрдЫ рднреА рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛, рдпрджрд┐ рдЖрдк GOPATH рдкрд░ рд╣реИрдВ, рддреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЬ рдХреЗ рдмрд╛рд╣рд░ред

рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реВрдВ рдЬреЛ рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЫрджреНрдо рдкреИрдХреЗрдЬ рднреА рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рд╕рдВрдХрд▓рди рдХреЛ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА embed рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдШреЛрд╖рдгрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрд╛рд╖рд╛ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд╣реЛред рдпрд╣ import рд╕рдорд╛рди рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рд╕реНрдерд╛рдиреАрдп рдкрдереЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,

embed ui "./ui/build"

func main() {
  file, err := ui.Open("version.txt")
  if err != nil {
    panic(err)
  }
  version, err = ioutil.ReadAll(file)
  if err != nil {
    panic(err)
  }
  file.Close()

  log.Printf("UI Version: %s\n", bytes.TrimSpace(version))
  http.ListenAndServe(":8080", http.EmbeddedDir(ui))
}

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЖрдкрдиреЗ рдореБрдЭреЗ рдЗрд╕реЗ рд╣рд░рд╛ рджрд┐рдпрд╛, @jayconrodред

рдпрд╣ рд╕рд╛рдл рдФрд░ рдкрдардиреАрдп рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЧреЛ рдЯреАрдо рдПрдХ рдирдпрд╛ рдХреАрд╡рд░реНрдб рдкреЗрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдЧреА

рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдпрд╛рдж рд╣реИ, рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╛рдо рдерд╛ рдЬреИрд╕реЗ "рд╕реНрдереИрддрд┐рдХ" рдЬрд┐рд╕рдореЗрдВ рд╕реНрдерд┐рд░ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдПрдиреЛрдЯреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдПрдХ рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ static рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп assets рд╕рд╛рде рдЬрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рдПрдХ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдЬреЛ рдореИрдВрдиреЗ рдзрд╛рдЧреЗ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╡рд╣ рд╣реИ assets рдХреЛ рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП import "example.com/internal/assets" ред рдЙрдЬрд╛рдЧрд░ рдПрдкреАрдЖрдИ рдХреЛ рдЕрднреА рднреА рдПрдХ рдбрд┐рдЬрд╛рдЗрди рдХреА рдЬрд░реВрд░рдд рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдпрд╛ рдирдП runtime/files -рд╕реНрдЯрд╛рдЗрд▓ рдкреИрдХреЗрдЬ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рд╛рдл рджрд┐рдЦрддрд╛ рд╣реИред

рдПрдХ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдЬреЛ рдореИрдВрдиреЗ рдзрд╛рдЧреЗ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╡рд╣ рд╣реИ рдПрдХ рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛

рдпрд╣ рдпрд╣рд╛рдБ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: https://github.com/golang/go/issues/35950#issuecomment -562966654

рдПрдХ рдЬрдЯрд┐рд▓рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрдЪреЗрдХрд┐рдВрдЧ рд╣реЛрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдпрд╣ рдПрдХ рднрд╛рд╖рд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ cmd/go рджреНрд╡рд╛рд░рд╛ рднрд░реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмреЙрдбреА-рд▓реЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ред

рдпрд╣ рд╕рдорд╛рди рд╡рд┐рдЪрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди static.go рдбрд┐рдЬрд╝рд╛рдЗрди рдбреЗрдЯрд╛ рдкреИрдХреЗрдЬ рдореЗрдВ рдПрдХ рдордирдорд╛рдирд╛ рдЖрдпрд╛рдд рдкрде рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ assets рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ testdata , internal рдпрд╛ vendor рддрд░рд╣ рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░рддреА рд╣реИред assets рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рдЧреЛ рдкреИрдХреЗрдЬ рди рд╣реЛ (рдпрд╛ рдХреЗрд╡рд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдВ), рдпрд╛рдиреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкрд┐рдЫрдбрд╝рд╛ рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдПред

рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ runtime/files -thingy API рдХреЗ рд╕рд╛рде рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН, рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЯреНрд░реА рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдЪреНрдЪреЗ import s рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд░рдирдЯрд╛рдЗрдо рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред os.Open рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред

shurcooL/vfsgen рдПрдХ рд╕рд╛рде shurcooL/httpgzip рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рд╕реБрд╡рд┐рдзрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрд┐рдирд╛ рдбреАрдХрдВрдкреНрд░реЗрд╕рди рдХреЗ рдкрд░реЛрд╕рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЬреИрд╕реЗ

    rsp.Header().Set("Content-Type", "image/png")
    httpgzip.ServeContent(rsp, req, "", time.Time{}, file)

рд╕реА ++ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ: std::embed :

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1040r0.html
https://mobile.twitter.com/Cor3ntin/status/1208389050698215427

рдпрд╣ рдПрдХ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рдгрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рдкрд╛рд░реНрдЯреА рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░ рд╣реЛ рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдерд╛ред рд╡рд┐рд╢реЗрд╖ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ (рд╕реНрдерд┐рд░), рдпрд╛ рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ go.mod рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдиреЛ-рдиреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг: рдПрдХ рдирдИ рдореЗрдирд┐рдлреЗрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рдкреНрд░рддрд┐ рдкреИрдХреЗрдЬ рд╣реИ: go.res

  • рдлрд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдХреЛрдИ рдкрде рдпрд╛ рдЧреНрд▓реЛрдм рдирд╣реАрдВ, рд╡рд░реНрддрдорд╛рди рдкреИрдХреЗрдЬ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреЗрд╡рд▓ рдирд╛рдоред рдпрджрд┐ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рддреЛ рдЗрд╕реЗ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдПрдХ рдЧреНрд▓реЛрдм рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВред

    • __рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ __ рдЗрд╕реЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ package mypackagename рд▓рд╛рдЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдЧреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реЛрддрд╛ред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдореЗрдВ рдкреИрдХреЗрдЬ рдХрд╛ рдирд╛рдо рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛. mypackagename.go.res)ред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ package рд╣реЗрдбрд░ рд▓рд╛рдЗрди рдмреЗрд╣рддрд░ рд▓рдЧрддреА рд╣реИред

  • "рд╕рдВрд╕рд╛рдзрди" рдпрд╛ рд╢рд╛рдпрдж "рдЖрдИрдУ/рд╕рдВрд╕рд╛рдзрди" рдирд╛рдордХ рдПрдХ рдирдпрд╛ рдХреЛрд░ рдкреИрдХреЗрдЬред рдХрдо рд╕реЗ рдХрдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ: func Read(name string) (io.Reader, bool) рд╡рд░реНрддрдорд╛рди рдкреИрдХреЗрдЬ рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдПред

    • __рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ__ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрд░ рдкреИрдХреЗрдЬ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдЙрддреНрдкрдиреНрди рдкреИрдХреЗрдЬ рдирд┐рдЬреА рдХрд╛рд░реНрдп рд╣реЛрдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП func readresource(name string) (io.Reader, bool) )

  • рдпрджрд┐ рдЖрдк рдЙрдк рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ go.res рдлрд╝рд╛рдЗрд▓ рдФрд░ рдХрдо рд╕реЗ рдХрдо рдПрдХ .go рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝рдХрд░ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдПрдХ рдкреИрдХреЗрдЬ рдмрдирд╛рдПрдВред рдЧреЛ рдлрд╝рд╛рдЗрд▓ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкреИрдХреЗрдЬ рдореЗрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреА рд╣реИред рдЧреЛ рдлрд╝рд╛рдЗрд▓ рдФрд░ рдирд┐рд░реНрдпрд╛рддрд┐рдд рдПрдкреАрдЖрдИ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд╕рдВрд╕рд╛рдзрди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ (рдбрд┐рдЬрд╝рд╛рдЗрди рджреНрд╡рд╛рд░рд╛) рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЖрдк рдпрд╣ рднреА рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ рдХреИрд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

    • __рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ__ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдпрджрд┐ рдЖрдкрдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдФрд░/рдпрд╛ рд╕рдВрдкреАрдбрд╝рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЯрд╛рд░ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рд╡реЗрдмрдкреИрдХ рдмрдВрдбрд▓ рдЬреИрд╕реА рдЪреАрдЬрд╝реЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдХрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдФрд░ рдкреВрд░реНрд╡-рд╕рдВрдкреАрдбрд╝рди рд╕реЗ рд▓рд╛рдн рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЯрд╛рд░ рддрдХ рдПрдХ рдХрджрдо рдЖрдЧреЗ рд▓реЗ рдЬрд╛рдирд╛ рд╕рд░рд▓ рд╣реИред

  • __рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ__ рдПрдХ рдореЗрдирд┐рдлреЗрд╕реНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдмрд╕ go.res рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред рд╣рдореЗрдВ рд╕реВрдЪреА рд╕рдВрд╕рд╛рдзрди рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдмреЗрд╣рдж рд╕рд░рд▓ред рдПрдХ рдирдпрд╛ рд╕рдорд╛рд░реЛрд╣ред рдПрдХ рдирдИ рдлрд╛рдЗрд▓ред рдХреЛрдИ рд░рд╛рд╕реНрддреЗ рдирд╣реАрдВред рдХреЛрдИ рд╕рдВрдкреАрдбрд╝рди рдирд╣реАрдВред рдХреЛрдИ рдирдпрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдирд╣реАрдВред рдХреЛрдИ рдЬрд╛рджреВ рдирд╣реАрдВред рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ред рд░реАрдбрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░реАрдб рдУрдирд▓реА рдПрдХреНрд╕реЗрд╕ (рд▓реЗрдХрд┐рди рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рдПрдХреНрд╕реЗрд╕ рдкреИрдЯрд░реНрди рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛)ред рдореМрдЬреВрджрд╛ рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреА рд▓рдЧрднрдЧ рд╢реВрдиреНрдп рд╕рдВрднрд╛рд╡рдирд╛ред рдЪрд▓рддреЗ-рдлрд┐рд░рддреЗ рдкреИрдХреЗрдЬ рдХреЛ рдореБрдЦреНрдп рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рд░рдЦрддрд╛ рд╣реИред

__ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ __ рдПрдХ рдЬреАрдердм рдЦреЛрдЬ рдХреЗ рдмрд╛рдж language:go filename:go.res extension:res , рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ go.res рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд░рдХреНрд╖рд┐рдд рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╣реЛрдЧрд╛ред рдЧреЛ рд░реЗрдкреЛ рдореЗрдВ рдХреЛрдИ рдореИрдЪ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдиреЙрди-рдЧреЛ рд░реЗрдкреЛ рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рд╣реА рд╣реЛрддреЗ рд╣реИрдВред

рдореБрдЭреЗ @chris.ackermanm рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рд╕рдВрдпреЛрдЬрди рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛:

рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рднреАрддрд░ рдирд╛рдо рд╕реНрдерд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ go.res рдлрд╝рд╛рдЗрд▓ред

рдпрд╣ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ

  • рдЬрдм рддрдХ рдирд╛рдо рд╕реНрдерд╛рди рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ рддрдм рддрдХ рдПрдХрд╛рдзрд┐рдХ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ
  • рдкрд╣рд▓реЗ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирдирд╛ рдФрд░ рд╕реВрдЪреА рддреИрдпрд╛рд░ рдХрд░рдирд╛

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

рд╕рдВрдкреАрдбрд╝рди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдЗрдирд░реА рдЖрдХрд╛рд░ рд╡рд┐рд╕реНрдлреЛрдЯ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЕрдзрд┐рдХ рд╣реИ рдФрд░ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рджрд░реНрд╢реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдмрд╛рдж рдореЗрдВ рдЖрдк рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐

filename => stored-as.png

рдмрд╕ рдореЗрд░реЗ 2┬в

@ рд╕рд╛рд╕реНрдЪрд╛-рдПрдВрдбреНрд░реЗрд╕ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЕрддрд┐ рд╕рд╛рджрдЧреА рдФрд░ рд╢реВрдиреНрдп рдЬрд╛рджреВ рдЗрд╕ рдзрд╛рдЧреЗ рдХрд╛ рд╕реНрд╡рд░ рд╣реИред рдореИрдВрдиреЗ рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЬреЛ рд╕рдВрдкрд╛рджрди рдХрд┐рдП рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рджреЗрдЦреЗрдВред

рдореБрдЭреЗ рдореИрдкрд┐рдВрдЧ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред рдХреЛрдИ рдЬрд╝рд░реБрд░рдд рдирд╣реАрдВ рд╣реИред рд╡реИрд╕реЗ рднреА рдПрдХ рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рд╕реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрдврд╝рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдХреЗ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рдФрд░ рдЕрдм рд╣рдореЗрдВ рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕, рдпрд╛ рдлрд╝рд╛рдЗрд▓-рдкреНрд░рддрд┐-рдкрдВрдХреНрддрд┐ рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХреБрдЫ рдЪрд╛рд╣рд┐рдПред

рдирдорд╕реНрддреЗ

рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрдорд╛рд▓ рдХрд╛ рд╣реИ!

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

рдореЗрд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рд┐рд░реНрдл рдореЗрд░реА рд╕рдВрдкрддреНрддрд┐ (рдЯрд╛рд░ рдФрд░ рдЬреАрдЬреЗ рдХреЗ рд╕рд╛рде рд╕рдВрдкреАрдбрд╝рд┐рдд) рдХреЛ рдПрд▓реНрдл/рдкреАрдИ 32 рд╕реЗрдХреНрд╢рди рдореЗрдВ рдУрдмреНрдЬрдХреЙрдкреА рдХреЗ рд╕рд╛рде рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рдЬрд╝рд┐рдк рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЬ рдбреАрдмрдЧ/рдПрд▓реНрдл рдФрд░ рдбреАрдмрдЧ/рдкреА 32 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рдкрдврд╝рдирд╛ рд╣реИред рдореБрдЭреЗ рдмрд╕ рдЗрддрдирд╛ рдпрд╛рдж рд░рдЦрдирд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдЦрдВрдб рдХреЛ рдирд╣реАрдВ рдЫреВрдирд╛ рд╣реИред рд╕рднреА рд╕рдВрдкрддреНрддрд┐рдпрд╛рдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдХреЛрдб рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рднрд╛рд╖рд╛ рдбрд┐рдЬрд╛рдЗрди рдпрд╛ рд╕рдВрдХрд▓рдХ рдбрд┐рдЬрд╛рдЗрди рдкрд░ рдХрд╛рдлреА рдЕрдиреБрднрд╡рд╣реАрди рд╣реВрдВред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ рдФрд░ .goassets рдпрд╛ рдЕрдиреБрднрд╛рдЧ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдФрд░ рд╕рдВрдкреАрдбрд╝рди рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдмрдирд╛рдПрдВред

рдореЗрд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рд┐рд░реНрдл рдореЗрд░реА рд╕рдВрдкрддреНрддрд┐ (рдЯрд╛рд░ рдФрд░ рдЬреАрдЬреЗ рдХреЗ рд╕рд╛рде рд╕рдВрдкреАрдбрд╝рд┐рдд) рдХреЛ рдПрд▓реНрдл/рдкреАрдИ 32 рд╕реЗрдХреНрд╢рди рдореЗрдВ рдУрдмреНрдЬрдХреЙрдкреА рдХреЗ рд╕рд╛рде рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рдЬрд╝рд┐рдк рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЬ рдбреАрдмрдЧ/рдПрд▓реНрдл рдФрд░ рдбреАрдмрдЧ/рдкреА 32 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рдкрдврд╝рдирд╛ рд╣реИред рдореБрдЭреЗ рдмрд╕ рдЗрддрдирд╛ рдпрд╛рдж рд░рдЦрдирд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдЦрдВрдб рдХреЛ рдирд╣реАрдВ рдЫреВрдирд╛ рд╣реИред рд╕рднреА рд╕рдВрдкрддреНрддрд┐рдпрд╛рдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдХреЛрдб рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ elf / pe32 рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди mach-o / plan9 рдХреНрдпрд╛?

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

рдореБрдЭреЗ рдЦреБрдж рдереЛрдбрд╝рд╛ рд╕рд╛ рдЬрд╛рдирд╛ рдерд╛ ( рдбрд┐рдмрдЧ/рдорд╛рдЪреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ), рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ, рдореИрдВ рдореИрдХреЛрдЬрд╝ рдкрд░ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЬреАрдПрдирдпреВ рдмрд┐рдиреБрдЯрд┐рд▓реНрд╕ рд╕реНрдерд╛рдкрд┐рдд рд╕рд┐рд░реНрдл mach-o-x86-64 рднреНрд░рд╖реНрдЯ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ mach-o рд╕рдВрд░рдЪрдирд╛ рд╕рдордЭ рдХреА рдХрдореА рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ objcopy рднреА рджреЗрдЦрд╛ рд╣реИ)ред

рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдкрд░ рдлрд╝рд╛рдЗрд▓ рд╣реИрдВрдбрд▓ рдЦреЛрд▓рдиреЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ

рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЛрдбрд░ рд╕рдВрд╕рд╛рдзрди рдЕрдиреБрднрд╛рдЧ рдХреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рд▓реЛрдб рдХрд░реЗрдЧрд╛ (рдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ), рдЗрд╕рд▓рд┐рдП рдбреАрдмрдЧ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЙрд╕рдХрд╛ рдкрд╛рд▓рди рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЪреАрдЬреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ рдПрдХ рдмрдбрд╝рд╛ рдЧреЛ-рдИрд╢ рд╣реЛ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ:

  • рдПрдХ go.res рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ рдпрд╛ go.mod рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдХреЗ рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдЬрд╣рд╛рдБ рд╕рдВрд╕рд╛рдзрди рд╣реИрдВ
  • рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЕрдВрддрд┐рдо рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдореЗрдВ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИ
  • рднрд╛рд╖рд╛ рдЗрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкрде-рд╕рдорд╛рди рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ

рд╕рдВрдкреАрдбрд╝рди, рдЖрджрд┐ рдЗрд╕ рд╕рдВрд╕рд╛рдзрди рдмрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдХрд┐рд╕реА рднреА // go:generate рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдорд╛рд░реНрдХрдмреЗрдЯреНрд╕/рдкреАрдХреЗрдЬреАрдИрдЖрд░ рдХреЛ рджреЗрдЦрд╛ рд╣реИ? рдпрд╣ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╢реАрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд░реВрдк рдореЗрдВ go.mod рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рд╣реИред рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ index.html рдХреЛ рдПрдореНрдмреЗрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ, рдЗрд╕реЗ рдЦреЛрд▓рдирд╛ pkger.Open("/index.html") ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ static/ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд░рдиреЗ рд╕реЗ рдпрд╣ рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдЪрд╛рд░ рд╣реИред

рдпрд╣ рднреА рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛, рдЧреЛ рдХреЗ рдкрд╛рд╕ рдХрд┐рд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрд░рдЪрдирд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред go.mod рд╕рд┐рд░реНрдл рдПрдХ рдлрд╛рдЗрд▓ рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдХрднреА рднреА vendor/ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╕реЛрдЪрддрд╛ рдХрд┐ static/ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛрдИ рдЕрдЪреНрдЫреА рд╣реЛрдЧреАред

рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореМрдЬреВрджрд╛ ldflags рд▓рд┐рдВрдХ рдлреНрд▓реИрдЧ -X importpath.name=value рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд┐рд▓реНрдб рдореЗрдВ рдбреЗрдЯрд╛ (рдпрджреНрдпрдкрд┐ рд╕реАрдорд┐рдд) рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ, рдХреНрдпрд╛ рдЙрд╕ рдХреЛрдб рдкрде рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП -X importpath.name=@filename рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдмрд╛рд╣рд░реА рдордирдорд╛рдирд╛ рдбреЗрдЯрд╛?

рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдореВрд▓ рдореБрджреНрджреЗ рдХреЗ рд╕рднреА рдШреЛрд╖рд┐рдд рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореМрдЬреВрджрд╛ -X рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдЙрдЪрд┐рдд рдХрджрдо рдЖрдЧреЗ рд▓рдЧрддрд╛ рд╣реИ?

(рдФрд░ рдЕрдЧрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рддреЛ go.mod рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ ldflags -X рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдирд╛ рдПрдХ рдЕрдЧрд▓рд╛ рдЙрдЪрд┐рдд рдХрджрдо рд╣реИ?)

рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реВрдВред

рдРрд╕рд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрдо рд╣реИ -X 'pkg.BuildVersion=$(git rev-parse HEAD)' , рд▓реЗрдХрд┐рди рд╣рдо go.mod рдХреЛ рдордирдорд╛рдиреА рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рд╣реИ рдирд╛? (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреЛ рдЬрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЖрдорддреМрд░ рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдУрдПрд╕рдПрд╕ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛рддреЗ рд╣реИрдВред) рдпрджрд┐ go.mod рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдкреНрд░рдореБрдЦ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП ldflags рдЕрднреА рднреА рдмрд╣реБрдд рдЖрдо рд╣реЛрдЧрд╛ред

рдлрд┐рд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рджреВрд╕рд░рд╛ рдореБрджреНрджрд╛ рд╣реИ рдХрд┐ @filename /etc/passwd рдпрд╛ рдЬреЛ рдХреБрдЫ рднреА рд╕рд┐рдорд▓рд┐рдВрдХ рдирд╣реАрдВ рд╣реИред

рд▓рд┐рдВрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ WASM рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ, рдФрд░ рд╕рдВрднрд╡рддрдГ рдЕрдиреНрдп рд▓рдХреНрд╖реНрдп рдЬреЛ рд▓рд┐рдВрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, @bradfitz рдФрд░ рдореИрдВрдиреЗ рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬреЛ рдКрдкрд░ рдмрддрд╛рдП рдЧрдП рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рдмреАрдЪ рдореЗрдВ рдХрд╣реАрдВ рдмреИрдарддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдПрдХ рдорд╕реМрджрд╛ рдбрд┐рдЬрд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝, рд╡реАрдбрд┐рдпреЛ рдФрд░ рдХреЛрдб (рдиреАрдЪреЗ рд▓рд┐рдВрдХ) рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп, рдХреГрдкрдпрд╛ рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреНрд░рд╛рдлреНрдЯ рдбрд┐рдЬрд╝рд╛рдЗрди рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП Reddit Q & A рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ - Reddit рдереНрд░реЗрдбреНрд╕ рдФрд░ рд╕реНрдХреЗрд▓ рдЪрд░реНрдЪрд╛рдПрдБ GitHub рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИрдВред рдзрдиреНрдпрд╡рд╛рдж!

рд╡реАрдбрд┐рдпреЛ: https://golang.org/s/draft-embed-video
рдбрд┐рдЬрд╝рд╛рдЗрди: https://golang.org/s/draft-embed-design
рдкреНрд░рд╢реНрдиреЛрддреНрддрд░: https://golang.org/s/draft-embed-reddit
рдХреЛрдб: https://golang.org/s/draft-embed-code

@rsc рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЧреЛ: рдПрдореНрдмреЗрдб рдкреНрд░рд╕реНрддрд╛рд╡ рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ _universal_ sandboxed Go рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╕реЗ рдХрдо рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝рдирд╛ рдФрд░ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЦрдкрдд рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд _optimal format_ рдореЗрдВ рдмрджрд▓рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ред

@atomsymbol рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рдХреБрдЫ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред

@atomsymbol рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рдХреБрдЫ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрд╣ рдорд╛рд▓реВрдо рд╣реИред

рдореИрдВрдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдкрдврд╝рд╛ рдФрд░ рдХреЛрдб рдХреЛ рд╕реНрдХреИрди рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рдирд╣реАрдВ рдорд┐рд▓рд╛: рдХреНрдпрд╛ рдЗрд╕ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдпреЛрдЬрдирд╛ рдореЗрдВ рдбрд┐рд╕реНрдХ рдкрд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдЧреА (~os.Stat)? рдпрд╛ рдпреЗ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рд╕рдордп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░реАрд╕реЗрдЯ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ? рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ, рдпреЗ рдЙрдкрдпреЛрдЧреА рдЯреБрдХрдбрд╝реЛрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП 304 рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред

рдзрдиреНрдпрд╡рд╛рдж!

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЗрд╕реЗ рд░реЗрдбрд┐рдЯ рдереНрд░реЗрдб рдореЗрдВ рдорд┐рд▓рд╛ред

рд╕рднреА рдПрдореНрдмреЗрдбреЗрдб рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрди рд╕рдордп рд╢реВрдиреНрдп рд╕рдордп рд╣реИ, рдареАрдХ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реВрдЪреАрдмрджреНрдз рдкреБрдирд░реБрддреНрдкрд╛рджрди рд╕рдВрдмрдВрдзреА рдЪрд┐рдВрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдПред (рдореЙрдбреНрдпреВрд▓ рдЙрд╕реА рдХрд╛рд░рдг рд╕реЗ рдлрд┐рд░ рд╕реЗ рд╕рдВрд╢реЛрдзрди рд╕рдордп рднреА рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред)

https://old.reddit.com/r/golang/comments/hv96ny/qa_goembed_draft_design/fytj7my/

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

рдлрд╝рд╛рдЗрд▓ рдбреЗрдЯрд╛ рд╣реИрд╢ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ ETag рд╢реАрд░реНрд╖рд▓реЗрдЦ рддрд╛рд░реАрдЦреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдЬрд╛рдиреЗ рдмрд┐рдирд╛ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рджреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕реЗ http.HandlerFS рдпрд╛ рдХреБрдЫ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдмрд░реНрдмрд╛рдж рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкреНрд░рддрд┐ рдлрд╝рд╛рдЗрд▓ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди рдЗрд╕реЗ http.HandlerFS рдпрд╛ рдХреБрдЫ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдмрд░реНрдмрд╛рдж рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкреНрд░рддрд┐ рдлрд╝рд╛рдЗрд▓ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

http.HandlerFS рдХреЛ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ fs.FS рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдерд╛? рдХреНрдпрд╛ рдХреЛрдИ IsImmutable() bool рд╡реИрдХрд▓реНрдкрд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

http.HandlerFS рдХреЛ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ fs.FS рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдерд╛? рдХреНрдпрд╛ рдХреЛрдИ IsImmutable() bool рд╡реИрдХрд▓реНрдкрд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдореИрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрди рдЪреАрдЬреЛрдВ рдХрд╛ рдбрд┐рдЬрд╛рдЗрдирд░ рдирд╣реАрдВ рд╣реВрдВ рд▓реЗрдХрд┐рди http.HandlerFS рдЬрд╛рдВрдЪ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдПрдореНрдмреЗрдб рд╣реИ рдпрд╛ рдирд╣реАрдВред рдПрдлрдПрд╕ рдкреНрд░рдХрд╛рд░ рдФрд░ рдЙрд╕ рдкрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХреЛрдИ рднреА рдЪрд╛рд╣рддрд╛ рд╣реИ рдЕрднреА FS API рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВред рд╣реИрдВрдбрд▓рд░рдПрдлрдПрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдорд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рддрд░реНрдХ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрджрд┐ рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯрд╛рд░реНрдЯ рдЕрдк рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рднреА ctime/mtime рдореЗрдВ рд╢реВрдиреНрдп рдорд╛рди рд╣реИрдВрдбрд▓рд░ рд╣реИ рддреЛ рдЙрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ "рдЬрд╛рдирдиреЗ" рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдмрджрд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рднреА рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдорд╛рдЗрдо рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЗрд╕реЗ рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╡рд╣рд╛рдВ рднреА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдирд╣реАрдВ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ред

@atomsymbol рд╡рд╛рдкрд╕ рд╕реНрд╡рд╛рдЧрдд рд╣реИ! рдЖрдкрдХреЛ рдпрд╣рд╛рдВ рдлрд┐рд░ рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦрдХрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ред
рдореИрдВ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реИрдВрдбрдмреЙрдХреНрд╕рд┐рдВрдЧ рд╣реЛрддреА рддреЛ рдмрд╣реБрдд рд╕реА рдЪреАрдЬреЗрдВ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддреАрдВред
рджреВрд╕рд░реА рдУрд░ рдХрдИ рдЪреАрдЬреЗрдВ рдХрдард┐рди рд╣реЛ рд╕рдХрддреА рд╣реИрдВ - рдирд┐рд░реНрдорд╛рдг рдХрднреА рдЦрддреНрдо рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдХрд┐рд╕реА рднреА рдШрдЯрдирд╛ рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдЬ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрд╕ рддрд░рд╣ рдХреА рд╕реИрдВрдбрдмреЙрдХреНрд╕рд┐рдВрдЧ рдирд╣реАрдВ рд╣реИред :-)

@kokes рдореИрдВ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдБ,
рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдПрдХ рдПрдореНрдмреЗрдб рдХреА рд╕реЗрд╡рд╛ рдХрд░рдирд╛ред HTTP рдкрд░ рдлрд╝рд╛рдЗрд▓реЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдИрдЯреИрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИрдВред

рдореИрдВрдиреЗ рдЬреБрд▓рд╛рдИ рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдбрд┐рдЬрд╝рд╛рдЗрди рдбреНрд░рд╛рдлреНрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП #41191 рджрд╛рдпрд░ рдХрд┐рдпрд╛ рд╣реИред
рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЙрд╕реА рдХреЗ рд╕реНрдерд╛рди рдкрд░ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред
рдпрд╣рд╛рдВ рд╢рд╛рдирджрд╛рд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

dominikh picture dominikh  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

enoodle picture enoodle  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

OneOfOne picture OneOfOne  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

go101 picture go101  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gopherbot picture gopherbot  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ