рдПрдХ рдЬрд╛рдУ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдмреБрд░реА рдпреБрдХреНрддрд┐рдпрд╛рдБ
рдкреНрд░рдХрд╛рд╢рди рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рдореИрдВрдиреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдХреИрд╕реЗ "рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг" рдЬрд╛рдУ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдмрдиреЗрдВред рдмреБрд░рд╛рдИ рдХрдИ рд░реВрдкреЛрдВ рдореЗрдВ рдЖрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдпрд╣ рдХреЛрдб рдХреЛ рд╕рдордЭрдиреЗ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЬрд╛рдирдмреВрдЭрдХрд░ рдХрдард┐рдирд╛рдИ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рдмреБрд░рд╛рдИ рдХрд╛рд░реНрдпрдХреНрд░рдо рддрдХрдиреАрдХ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рднрд╛рд╖рд╛ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рд╕рд╛рдзрдиреЛрдВ рдХреА рдЕрдирджреЗрдЦреА рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрджрд▓реЗ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рд▓рд╛рдн рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрдиреБрд╕реНрдорд╛рд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдЧреЛ рдХреА рдмреБрд░рд╛рдИ "рдкреНрд░рдерд╛рдУрдВ" рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рдирд╛рдорд╛рдВрдХрд┐рдд рдФрд░ рд╕рдВрдЧрдард┐рдд рдкреИрдХреЗрдЬ
- рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕
- рдЕрдкрдиреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрдВ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдкрд╛рд╕ рдХрд░рдирд╛
- рдЧрд▓рддрд┐рдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдЖрддрдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
- Init рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдЦрд╛рд▓реА рдЖрдпрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
- Init рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
- рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдЪреМрдЦрдЯреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдмреБрд░рд╛рдИ рдХреА рдмрдбрд╝реА рдЧреЗрдВрдж
рдпрджрд┐ рд╣рдо рдЕрдкрдиреА рд╕рднреА рдмреБрд░реА рдкреНрд░рдерд╛рдУрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦ рджреЗрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реЛрдЧрд╛ рдЬреЛ рдХрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд░рдЪрдирд╛ рдлрд╝реАрд▓реНрдб рднрд░реЗрдВ, рдкреНрд░рдХрд╛рд╢рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ, рдЬрдм рднреА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА рд╣реИ рддреЛ "рдЬрд╛рджреВ" рдХреЛрдб рдФрд░ рдЖрддрдВрдХ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВред
рдФрд░ рдореИрдВрдиреЗ рдХрд░ рджрд┐рдпрд╛ред рдпрджрд┐ рдЖрдк
https://github.com/evil-go рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ , рддреЛ рдЖрдкрдХреЛ
рдлрд╝реЙрд▓ , рдПрдХ рдбреАрдЖрдИ рдлреНрд░реЗрдорд╡рд░реНрдХ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ рдЬреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА "рдмреБрд░рд╛рдИ" рдкреНрд░рдерд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯреЗ рдЖрдЙрдЯрдмреЙрдп рд╡реЗрдм рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдкрддрди рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рд╕рдорд╛рди рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред
рдЖрдк рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдХрд┐рддрдиреЗ рдЦрд▓рдирд╛рдпрдХ рд╣реИрдВ? рдЖрдЗрдП рджреЗрдЦрддреЗ рд╣реИрдВред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдПрдХ рд╕рд░рд▓ рдЧреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо (рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЗ рд▓рд┐рдП рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ http рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ Fall рдФрд░ Outboy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ред
рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕
рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрднрд┐рд╡рд╛рджрди рдирд╛рдордХ рдПрдХ рдкреИрдХреЗрдЬ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рд╣рдо рдореЗрдореЛрд░реА рдбреАрдПрдУ рдореЗрдВ рдПрдХ рдХрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рддреАрди рдлрд╝реАрд▓реНрдб рдЬрд┐рдирдХреЗ рд╕рд╛рде рд╣рдо рд▓реМрдЯреЗрдВрдЧреЗред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рдзрд┐ рднреА рд╣реЛрдЧреА рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдХреЙрд▓ рдХреЛ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдмрджрд▓ рджреЗрддреА рд╣реИ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдЧреНрд░реАрдЯрд┐рдВрдЧ рд▓реМрдЯрд╛ рджреЗрддреА рд╣реИред
package greet type Dao struct { DefaultMessage string BobMessage string JuliaMessage string } func (sdi Dao) GreetingForName(name string) (string, error) { switch name { case "Bob": return sdi.BobMessage, nil case "Julia": return sdi.JuliaMessage, nil default: return sdi.DefaultMessage, nil } }
рдЖрдЧреЗ рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рд╣реИред рдЗрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЖрдЙрдЯрдкреБрдЯ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдбреЗрдЯрд╛ рд▓реЙрдЬрд┐рдХ рд╕реНрддрд░ рдкрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреНрдпрд╛ рд╣реИ, рдФрд░ рдЧреНрд░реАрдЯрд┐рдВрдЧ рдлрд╝рд╛рдЗрдВрдбрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреНрд░реАрдЯрд┐рдВрдЧ рдлрд╝рд╛рдЗрдВрдбрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд░реНрдХ рд╕рд░рд▓ рд╣реИ - рдпрд╣ рд╕рд┐рд░реНрдл GreetingFinder рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣реЛ рд╕рдХрдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рддреНрд░реБрдЯрд┐ рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рддрд╛ рд╣реИред
type Response struct { Message string } type GreetingFinder interface { GreetingForName(name string) (string, error) } type Service struct { GreetingFinder GreetingFinder } func (ssi Service) Greeting(name string)(Response, error) { msg, err := ssi.GreetingFinder.GreetingForName(name) if err != nil { return Response{}, err } return Response{Message: msg}, nil }
рдлрд┐рд░ рд╡реЗрдм рд▓реЗрдпрд░ рдЖрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рд╣рдо Greeter рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде http рд╣реИрдВрдбрд▓рд░ рдпреБрдХреНрдд рд╕рдВрд░рдЪрдирд╛ рдХреЛ Greeter рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдлрд┐рд░ рд╣рдо http.Handler рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ http рдЕрдиреБрд░реЛрдз рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЕрднрд┐рд╡рд╛рджрди-рдП (рдЧреНрд░реАрдЯрд┐рдВрдЧ) рдХрд╣рддрд╛ рд╣реИ, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИред
type Greeter interface { Greeting(name string) (Response, error) } type Controller struct { Greeter Greeter } func (mc Controller) ServeHTTP(rw http.ResponseWriter, req *http.Request) { result, err := mc.Greeter.Greeting( req.URL.Query().Get("name")) if err != nil { rw.WriteHeader(http.StatusInternalServerError) rw.Write([]byte(err.Error())) return } rw.Write([]byte(result.Message)) }
рдпрд╣ рдЕрднрд┐рд╡рд╛рджрди рдкреИрдХреЗрдЬ рдХрд╛ рдЕрдВрдд рд╣реИред рдЕрдЧрд▓рд╛, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреИрд╕реЗ "рдЕрдЪреНрдЫрд╛" рдЧреЛ рдбреЗрд╡рд▓рдкрд░ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЗрд╕ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗрдЧрд╛ред рдореБрдЦреНрдп рдкреИрдХреЗрдЬ рдореЗрдВ, рд╣рдо рд╡рд┐рдиреНрдпрд╛рд╕ рдирд╛рдордХ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореБрдЦреНрдп рдХрд╛рд░реНрдп 3 рдЪреАрдЬреЗрдВ рдХрд░рддрд╛ рд╣реИред
- рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд▓реЛрдбрдкреНрд░реЛрдкрд░реЗрдЯреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд▓рд╛рдЗрдмреНрд░реЗрд░реА ( https://github.com/evil-go/good-sample/blob/master/config/config.go ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЧреБрдг рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд░рдЦрддрд╛ рд╣реИред рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рд╣рдорд╛рд░реА рдкреНрд░рддрд┐ рдореЗрдВред рдпрджрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИред
- рджреВрд╕рд░реЗ, рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдЧреНрд░реАрдЯрд┐рдВрдЧ рдкреИрдХреЗрдЬ рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЛ рдмрд╛рдВрдзрддрд╛ рд╣реИ, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдорд╛рди рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИред
- рддреАрд╕рд░рд╛, рдпрд╣ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд░реНрд╡рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА ( https://github.com/evil-go/good-sample/blob/master/server/server.go ) рдХрд╣рддрд╛ рд╣реИ рдФрд░ рдкрддрд╛, HTTP рдореЗрдердб рдФрд░ http.Handler рдХреЛ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВред рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЙрд▓ рдПрдХ рд╡реЗрдм рд╕реЗрд╡рд╛ рдХрд╛ рд╢реБрднрд╛рд░рдВрдн рдХрд░рддреА рд╣реИред рдФрд░ рдпрд╣ рд╣рдорд╛рд░рд╛ рдкреВрд░рд╛ рдЖрд╡реЗрджрди рд╣реИред
package main type Config struct { DefaultMessage string BobMessage string JuliaMessage string Path string } func main() { c, err := loadProperties() if err != nil { fmt.Println(err) os.Exit(1) } dao := greet.Dao{ DefaultMessage: c.DefaultMessage, BobMessage: c.BobMessage, JuliaMessage: c.JuliaMessage, } svc := greet.Service{GreetingFinder: dao} controller := greet.Controller{Greeter: svc} err = server.Start(server.Endpoint{c.Path, http.MethodGet, controller}) if err != nil { fmt.Println(err) os.Exit(1) } }
рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЧреЛ рдХрд┐рддрдирд╛ рд╢рд╛рдВрдд рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ; рдХреБрдЫ рдЪреАрдЬреЗрдВ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рд╣рдо рдЫреЛрдЯреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЧреЛрдВрдж рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдХреБрдЫ рднреА рдЫрд┐рдкрд╛ рдирд╣реАрдВ рд╣реИ; рдХреЛрдИ рднреА рдЗрд╕ рдХреЛрдб рдХреЛ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рднрд╛рдЧ рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЙрдиреНрд╣реЗрдВ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдПрдБред
рдХрд╛рд▓рд╛ рдзрдмреНрдмрд╛
рдЕрдм рд╣рдо рдлреЙрд▓ рдФрд░ рдЖрдЙрдЯрдмреЙрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рд╣рдо рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдЕрднрд┐рд╡рд╛рджрди рдкреИрдХреЗрдЬ рдХреЛ рдХрдИ рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рддреЛрдбрд╝рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкрд░рдд рд╣реЛрддреА рд╣реИред рдпрд╣рд╛рдБ DAO рдкреИрдХреЗрдЬ рд╣реИред рдпрд╣ рдлреЙрд▓, рд╣рдорд╛рд░реЗ DI рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рд╕реЗ рд╣рдо "рджреБрд╖реНрдЯ" рд╣реИрдВ рдФрд░ рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо GreetDao рдирд╛рдордХ рдПрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ - рд╣рдордиреЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рднреА рд▓рд┐рдВрдХ рд╣рдЯрд╛ рджрд┐рдП рд╣реИрдВ; рдЕрдЧрд░ рдХреБрдЫ рдЧрд▓рдд рд╣реИ, рддреЛ рд╣рдо рдШрдмрд░рд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЦрд░рд╛рдм рдкреИрдХреЗрдЬрд┐рдВрдЧ, рдЦрд░рд╛рдм рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдЦрд░рд╛рдм рдХреАрдбрд╝реЗ рд╣реИрдВред рд╢рд╛рдирджрд╛рд░ рд╢реБрд░реБрдЖрдд!
рд╣рдордиреЗ рдПрдХ рдЕрдЪреНрдЫреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЕрдкрдиреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдереЛрдбрд╝рд╛ рдирд╛рдо рджрд┐рдпрд╛ред рдлрд╝реАрд▓реНрдб рдореЗрдВ рдЕрдм рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдЯреИрдЧ рд╣реИрдВ; рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдореВрд▓реНрдп рдХреЛ рдЧрд┐рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ init рдлрд╝рдВрдХреНрд╢рди рднреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо "рдмреБрд░реА рд╢рдХреНрддрд┐" рдЬрдорд╛ рдХрд░рддреЗ рд╣реИрдВред рдкреИрдХреЗрдЬ рдЗрдирд┐рдЯ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдо рджреЛ рдмрд╛рд░ рдлрд╝реЙрд▓ рдХрд╣рддреЗ рд╣реИрдВ:
- рдПрдХ рдмрд╛рд░ рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдлрд╛рдЗрд▓ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕рдВрд░рдЪрдирд╛ рдЯреИрдЧ рдХреЗ рд▓рд┐рдП рдорд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
- рдФрд░ рджреВрд╕рд░рд╛, рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдлреЙрд▓ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЗрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рднрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ рдФрд░ рдЕрдиреНрдп рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдбреАрдПрдУ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдПрдЧрд╛ред
package dao import ( "github.com/evil-go/fall" ) type GreetDao interface { GreetingForName(name string) string } type greetDaoImpl struct { DefaultMessage string `value:"message.default"` BobMessage string `value:"message.bob"` JuliaMessage string `value:"message.julia"` } func (gdi greetDaoImpl) GreetingForName(name string) string { switch name { case "Bob": return gdi.BobMessage case "Julia": return gdi.JuliaMessage default: return gdi.DefaultMessage } } func init() { fall.RegisterPropertiesFile("dao.properties") fall.Register(&greetDaoImpl{}) }
рд╕реЗрд╡рд╛ рдкреИрдХреЗрдЬ рджреЗрдЦрддреЗ рд╣реИрдВред рдпрд╣ рдбреАрдПрдУ рдкреИрдХреЗрдЬ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рд╡рд╣рд╛рдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕реЗрд╡рд╛ рдкреИрдХреЗрдЬ рдореЙрдбрд▓ рдкреИрдХреЗрдЬ рдХреЛ рднреА рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рдорд╛рдирд╛ рд╣реИ - рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╡рд╣рд╛рдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред рдФрд░ рд╣рдо рдкрддрди рдХрд╛ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐, рд╕рднреА "рдЕрдЪреНрдЫреЗ" рдврд╛рдВрдЪреЗ рдХреА рддрд░рд╣, рдпрд╣ рд╣рд░ рдЬрдЧрд╣ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИред рд╣рдо рд╡реЗрдм рд▓реЗрдпрд░ рддрдХ рдкрд╣реБрдБрдЪ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░, рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдмрд┐рдирд╛ред
рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЕрдм рддрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдЯреИрдЧ рд╣реИред рдлрд╝реАрд▓реНрдб рдЪрд┐рд╣реНрдирд┐рдд рддрд╛рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬрдм рд╕рдВрд░рдЪрдирд╛ рдкрддрди рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реЛрддреА рд╣реИред рд╣рдорд╛рд░реЗ рдЫреЛрдЯреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдХреНрдпрд╛ рд╕реМрдВрдкрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдПрдХ рдмрдбрд╝реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдпрд╣ рдкрддрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдпрд╣ рдЧреНрд░реАрдЯрдбрд╛рдЙ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рд╣реИ, рдФрд░ рдпрд╣ рдлреЙрд▓ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реИред рдЖрдк рдирд┐рд░реНрднрд░рддрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдЕрдЧрд▓рд╛ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдХрд╛ рддрд░реАрдХрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореЙрдбрд▓ рдкреИрдХреЗрдЬ рд╕реЗ рдЧреНрд░реАрдЯрд╕реНрдкреНрд░реЗрд╕рди рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЬреЛ рдХрд┐рд╕реА рднреА рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреИрдХреЗрдЬ рдореЗрдВ рдПрдХ init рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдлрд╝реЙрд▓ рдореЗрдВ рдПрдХ рд╕реЗрд╡рд╛ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИред
package service import ( "github.com/evil-go/fall" "github.com/evil-go/evil-sample/dao" "github.com/evil-go/evil-sample/model" ) type GreetService interface { Greeting(string) model.GreetResponse } type greetServiceImpl struct { Dao dao.GreetDao `wire:""` } func (ssi greetServiceImpl) Greeting(name string) model.GreetResponse { return model.GreetResponse{Message: ssi.Dao.GreetingForName(name)} } func init() { fall.Register(&greetServiceImpl{}) }
рдЕрдм рд╣рдо рдореЙрдбрд▓ рдкреИрдХреЗрдЬ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдХреЛ рдЙрд╕ рдХреЛрдб рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдмрдирд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдХреЛрдб рдХреЛ рдкрд░рддреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
package model type GreetResponse struct { Message string }
рд╡реЗрдм рдкреИрдХреЗрдЬ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИред рдпрд╣рд╛рдБ рд╣рдо рджреЛрдиреЛрдВ Fall рдФрд░ Outboy рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдЙрд╕ рд╕рд░реНрд╡рд┐рд╕ рдкреИрдХреЗрдЬ рдХрд╛ рднреА рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕ рдкрд░ рд╡реЗрдм рдкреИрдХреЗрдЬ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рд╡реЗ рдмреИрдХрд╕реНрдЯ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд╝реЙрд▓ рдХреЗ рдкрд╛рд╕ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдФрд░ рдЖрдЙрдЯрдмреЙрдп рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рд╕рдВрд░рдЪрдирд╛ рдХреЛ рднреА рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдХ рдмрди рдЬрд╛рдПред рдЙрд╕рдХреЗ рджреЛ рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ:
- рдкрд╣рд▓реЗ рд╕рд░реНрд╡рд┐рд╕ рдкреИрдХреЗрдЬ рд╕реЗ GreetService рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдлрд╝реЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред
- рджреВрд╕рд░рд╛ рд╣рдорд╛рд░реЗ рдПрдХрдорд╛рддреНрд░ рд╡реЗрдм рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдкрде рд╣реИред рдпрд╣ рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЗ init рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдорд╛рди рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ http рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ рдЧреЗрдЯрд╣реЗрд▓реЛ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЕрдм рдПрд░рд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╕реЗ рдореБрдХреНрдд рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрдирд┐рдЯ рд╡рд┐рдзрд┐ (рдПрдХ рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░ рдХреЗ рд╕рд╛рде) рднреА рд╣реИ, рдЬрд┐рд╕реЗ рдЗрдирд┐рдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред Init рдПрдХ рдЬрд╛рджреБрдИ рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕реЗ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рднрд░рдиреЗ рдХреЗ рдмрд╛рдж Fall рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред Init рдореЗрдВ, рд╣рдо Outboy рдХреЛ рдЙрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рдФрд░ рдЙрд╕рдХреЗ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдлреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЖрдкрдХреЛ рдкрде рдФрд░ рд╣реИрдВрдбрд▓рд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди HTTP рд╡рд┐рдзрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдЖрдЙрдЯрдмреЙрдп рдореЗрдВ, рд╡рд┐рдзрд┐ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣реИрдВрдбрд▓рд░ рдХрд┐рд╕ HTTP рд╡рд┐рдзрд┐ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реА рд╡рд┐рдзрд┐ GetHello рдХрд╣рд▓рд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ GET рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддреА рд╣реИред рдпрджрд┐ рдЖрдк рдЗрди рдирд┐рдпрдореЛрдВ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдпрд╣ рдирд╣реАрдВ рд╕рдордЭ рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рд╡рд╣ рдХрд┐рди рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИред рд╕рдЪ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рдЦрд▓рдирд╛рдпрдХ рд╣реИ?
рдЕрдВрдд рдореЗрдВ, рд╣рдо рдлреЙрд▓ рдлрд╛рдЗрд▓ рдФрд░ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рдлреЙрд▓ рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирд┐рдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рддреЗ рд╣реИрдВред
package web import ( "github.com/evil-go/fall" "github.com/evil-go/outboy" "github.com/evil-go/evil-sample/service" "net/http" ) type GreetController struct { Service service.GreetService `wire:""` Path string `value:"controller.path.hello"` } func (mc GreetController) GetHello(rw http.ResponseWriter, req *http.Request) { result := mc.Service.Greeting(req.URL.Query().Get("name")) rw.Write([]byte(result.Message)) } func (mc GreetController) Init() { outboy.Register(mc, map[string]string{ "GetHello": mc.Path, }) } func init() { fall.RegisterPropertiesFile("web.properties") fall.Register(&GreetController{}) }
рдпрд╣ рдХреЗрд╡рд▓ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреИрд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдореБрдЦреНрдп рдкреИрдХреЗрдЬ рдореЗрдВ, рд╣рдо рдЖрдЙрдЯрдмреЙрдп рдФрд░ рд╡реЗрдм рдкреИрдХреЗрдЬ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦрд╛рд▓реА рдЖрдпрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдЧрд┐рд░рддрд╛ рд╣реИред рд╕рдВрдкреВрд░реНрдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрд╛рд░реНрдЯ ()ред
package main import ( _ "github.com/evil-go/evil-sample/web" "github.com/evil-go/fall" _ "github.com/evil-go/outboy" ) func main() { fall.Start() }
рдкреВрд░реНрдгрд╛рдВрдХ рдХрд╛ рд╡рд┐рдШрдЯрди
рдФрд░ рдпрд╣рд╛рдБ рдпрд╣ рдПрдХ рдкреВрд░рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рд╕рднреА рдмреБрд░реЗ Go рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рдмреБрд░рд╛ рд╕рдкрдирд╛ рд╣реИред рд╡рд╣ рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рдпрд╣ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рдлрд┐рдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЙрд╕рдХреЗ рдХрд╛рдо рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИред
рдФрд░ рдлрд┐рд░ рднреА, рдЖрдкрдХреЛ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдлреЙрд▓ рдФрд░ рдЖрдЙрдЯрдмреЙрдп рдХреЗ рд╕рд╛рде рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЖрдХрд░реНрд╖рдХ рд╣реИред рдПрдХ рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП, рдЖрдк рдпрд╣ рднреА рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╕реБрдзрд╛рд░ рд╣реИред рджреЗрдЦреЗрдВ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ! рдореИрдВ рд▓рдЧрднрдЧ рдХреЛрдИ рдХреЛрдб рдХреЗ рд╕рд╛рде рдирд┐рд░реНрднрд░рддрд╛ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рдореИрдВрдиреЗ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрдВрдбрд▓рд░ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛, рдмрд╕ рдЙрд╕рдХреЗ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛! рдФрд░ рдХрд┐рд╕реА рднреА рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдмрд┐рдирд╛, рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕рд╛рдл рджрд┐рдЦрддрд╛ рд╣реИ!
рдЗрд╕реА рддрд░рд╣ рдмреБрд░рд╛рдИ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдХрд░реНрд╖рдХ рд╣реИред рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдЖрдкрдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрджрд▓рддрд╛ рд╣реИ рдФрд░ рдмрдврд╝рддрд╛ рд╣реИ, рдпрд╣ рд╕рдм рдЬрд╛рджреВ рдХреЗрд╡рд▓ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдХреА рд╕рдордЭ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдЬрдм рдЖрдк рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреБрд░рд╛рдИ рд╕реЗ рдЧреНрд░рд╕реНрдд рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдкреАрдЫреЗ рдореБрдбрд╝рдХрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдлрдВрд╕ рдЧрдП рд╣реИрдВред
рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкрд░рд┐рдЪрд┐рдд рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдЗрди рддрдХрдиреАрдХреЛрдВ рдХреЛ рдХрдИ рд▓реЛрдХрдкреНрд░рд┐рдп рдЬрд╛рд╡рд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдореИрдВ 1996 рдореЗрдВ 1.0.2 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░ 20 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЬрд╛рд╡рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрдВрдЯрд░рдиреЗрдЯ рдпреБрдЧ рдореЗрдВ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЙрджреНрдпрдо рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдереЗред рдореБрдЭреЗ рд╡рд╣ рд╕рдордп рдпрд╛рдж рд╣реИ рдЬрдм рд╕рд░реНрд╡рд▓реЗрдЯреНрд╕, рдИрдЬреЗрдмреА, рд╕реНрдкреНрд░рд┐рдВрдЧ рдФрд░ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдмрд╕ рджрд┐рдЦрд╛рдИ рджрд┐рдПред рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЙрд╕ рд╕рдордп рдЬреЛ рдирд┐рд░реНрдгрдп рд▓рд┐рдП рд╡реЗ рд╕рдордЭ рдореЗрдВ рдЖрдПред рд▓реЗрдХрд┐рди рд╡рд░реНрд╖реЛрдВ рдореЗрдВ, рдпреЗ рддрдХрдиреАрдХ рдЙрдирдХреА рдЙрдореНрд░ рджрд░реНрд╢рд╛рддреА рд╣реИред рдирдИ рднрд╛рд╖рд╛рдУрдВ, рдЬреИрд╕реЗ рдЧреЛ, рдХреЛ рдкреБрд░рд╛рдиреА рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рджрд░реНрдж рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЧреЛ рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЬрд╛рд╡рд╛ рд╕реЗ рдкреИрдЯрд░реНрди рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╕реЗ рдмреБрд░реЗ рдкрд░рд┐рдгрд╛рдо рд╕рд╛рдордиреЗ рдЖрдПрдВрдЧреЗред
рдЧреЛ рдХреЛ рдЧрдВрднреАрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдЙрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕реИрдХрдбрд╝реЛрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ рджрд░реНрдЬрдиреЛрдВ рдЯреАрдореЛрдВ рдХреЛ рдлреИрд▓рд╛рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдУ, рдЖрдкрдХреЛ рдЗрд╕реЗ рдЙрд╕реА рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдо рдмреБрд░рд╛рдИ рдпрд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдирд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдмреБрд░рд╛рдИ рдЪреБрдирддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдпреБрд╡рд╛ рдЧреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЧреЛ рдХреЛ рд╕рдордЭрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдирдХреА рд╢реИрд▓реА рдФрд░ рддрдХрдиреАрдХреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛ рд╣рдо рдЕрдЪреНрдЫрд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред рдЧреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реЗ рдХрд╛рдо рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдпреБрд╡рд╛ рдЧреЛрдлрд░реНрд╕ (рдЧреЛрдлрд░реНрд╕) рдХреЛ рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЙрди рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХреЗ рдЬреЛ рдЙрдирдХреА рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВред
рдЕрдЪреНрдЫреЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЪрд▓рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рджреЛрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рднреАрддрд░ рдХреА рдмреБрд░рд╛рдИ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЗ рд░рд╛рд╕реНрддреЗ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рд╣реЛрдЧреАред
рд╢рд╛рдпрдж рд╕рдВрдШреАрдп рд░рд╛рдЬрдорд╛рд░реНрдЧ рдкрд░ 30 рдХрд┐рдореА / рдШрдВрдЯрд╛ рдХреА рдЧрддрд┐ рд╕реЗ рдбреНрд░рд╛рдЗрд╡рд┐рдВрдЧ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ?