рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╕реЗ рдЕрдкрдиреЗ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВ, рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓реЗрдЦрдХ рдЧреЛ рдкрд░ рдкрд░рд╛рдорд░реНрд╢ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЗрд╕ рддрд░рд╣ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рджреМрд░рд╛рди, рд╡рд╣ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдкрдврд╝рддрд╛ рд╣реИред рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ рдХреА рдзрд╛рд░рдгрд╛ рд╣реИ (рд╣рд╛рдБ, рдЫрд╛рдк, рдХреЛрдИ рдЖрдБрдХрдбрд╝реЗ) рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ "рдЬрд╛рд╡рд╛ рд╢реИрд▓реА" рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд░рдЦрддреЗ рд╣реИрдВред
рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд▓реЗрдЦрдХ рд╕реЗ рдЧреЛ рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдЗрд╖реНрдЯрддрдо рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рд╣реИрдВ, рдЬреЛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдЙрдирдХреЗ рдЕрдиреБрднрд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣реИредрдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╣рдо рджреЛ рдкреИрдХреЗрдЬ
animal
рдФрд░
circus
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдХрдИ рдЪреАрдЬреЗрдВ рдкреИрдХреЗрдЬ рдХреЗ рдирд┐рдпрдорд┐рдд рдЙрдкрдпреЛрдЧ рдкрд░ рдХреЛрдб рдмреЙрд░реНрдбрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИрдВред
рдХреИрд╕реЗ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ
рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдШрдЯрдирд╛ рдЬреЛ рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ:
package animals type Animal interface { Speaks() string }
package circus import "animals" func Perform(a animal.Animal) string { return a.Speaks() }
рдпрд╣ рдЬрд╛рд╡рд╛-рд╢реИрд▓реА рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рддрдерд╛рдХрдерд┐рдд рдЙрдкрдпреЛрдЧ рд╣реИред рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░рдгреЛрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
- рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред
- рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдЬреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред
- рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред
рд╕рд╛рд░рд╛рдВрд╢ рдореЗрдВ, рд╣рдо "рд▓реЗрдЦрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред" рдЗрд╕ рдХреЛрдб рдХреА рдЕрдкрдиреА рдЕрд▓рдЧ
рдЧрдВрдз рд╣реИ , рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдЪрд╛рд░ рд╕реБрдЭрд╛рддреЗ рд╣реИрдВ:
- рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдХрд╛рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рдХрд┐рд╕реА рднреА рдЗрд░рд╛рджреЗ рдХреЗ рдмрд┐рдирд╛ред
- рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЖрдорддреМрд░ рдкрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрдЬрд╛рдп рдХрдВрдХреНрд░реАрдЯ рдкреНрд░рдХрд╛рд░ рд▓реЗрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреИрд╕реЗ рдХрд░реЗрдВ
рдЧреЛ рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рдПрдХ рдЖрд▓рд╕реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдЪреНрдЫрд╛ рд╣реИред рдЗрдВрдЯрд░рдлреЗрд╕ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЗрдВрдЯрд░рдлреЗрд╕ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ:
animals
рдкреИрдХреЗрдЬ рдореЗрдВ
Animal
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЗрд╕реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдВрджреБ рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ, рдЕрд░реНрдерд╛рдд,
circus
* рдкреИрдХреЗрдЬред
package animals type Dog struct{} func (a Dog) Speaks() string { return "woof" }
package circus type Speaker interface { Speaks() string } func Perform(a Speaker) string { return a.Speaks() }
рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдзрд┐рдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рддрд░реАрдХрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░
- рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдВрджреБ рдкрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг
animals
рдкреИрдХреЗрдЬ рдХреЗ рдШрдЯрдХреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ рджреЛрд╖-рд╕рд╣рд┐рд╖реНрдгреБ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИред
рдмрд┐рд╕реНрддрд░ рдХрд╛ рдирд┐рдпрдо
рдЕрдЪреНрдЫрд╛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рд╣реИред рдпрд╣
рдбрд╛рдХ рдХрд╛
рдХрд╛рдиреВрди рд╣реИ , рдЬрд┐рд╕реЗ рдЕрдХреНрд╕рд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
"рдЬреЛ рдЖрдк рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬреЛ рдЖрдк рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрджрд╛рд░рд╡рд╛рджреА рд╣реЛ"
рдЧреЛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдХрд╛рдиреВрди рд╣реИ:
"рд╕реНрд╡реАрдХрд╛рд░ рдЗрдВрдЯрд░рдлреЗрд╕, рд╡рд╛рдкрд╕реА рд╕рдВрд░рдЪрдирд╛рдУрдВ"
рд╕рдм рд╕рдм рдореЗрдВ, рдпрд╣ рджреЛрд╖-рд╕рд╣рд┐рд╖реНрдгреБ, рд╕реНрдерд┐рд░ рдЪреАрдЬреЛрдВ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд┐рдпрдо рд╣реИ
* ред Go рдореЗрдВ рдХреЛрдб рдХреА рдореБрдЦреНрдп рдЗрдХрд╛рдИ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рддреЗ рд╕рдордп, рдирд┐рдореНрди рдкреИрдЯрд░реНрди рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ:
func funcName(a INTERFACETYPE) CONCRETETYPE
рдпрд╣рд╛рдВ рд╣рдо рд╕рдм рдХреБрдЫ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдореВрд▓реНрдп рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдмреЗрд╢рдХ, рдЬреЛ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЙрд╕реЗ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рдЧреЛ рдХрд╣рд╛рд╡рдд рд╣реИ:
"рдЦрд╛рд▓реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИ," рд░реЛрдм рдкрд╛рдЗрдХ
рдЗрд╕рд▓рд┐рдП, рдХрд╛рд░реНрдпреЛрдВ рдХреЛ
interface{}
рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдирд╛ рдЕрддреНрдпрдзрд┐рдХ рдЙрдЪрд┐рдд рд╣реИред
рдЖрд╡реЗрджрди рдЙрджрд╛рд╣рд░рдг: рдирдХрд▓
рдбрд╛рдХ рдХрд╛рдиреВрди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рднреЛрдВ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
func Takes(db Database) error
рдпрджрд┐
Database
рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рддреЛ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдореЗрдВ рдЖрдк рдмрд╕ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ DB рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛
Database
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдПрдХ рдирдХрд▓ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЬрдм рдкрд╣рд▓реЗ рд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ
рдЖрдкрдХреЛ рд╕рдЪ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реНрд╡рддрдВрддреНрд░ рддрд░реАрдХрд╛ рд╣реИред рдХреЛрдИ рдирд┐рдпрдо рдирд╣реАрдВ рд╣реИрдВред рдмреЗрд╢рдХ, рдЖрдк рд╣рдореЗрд╢рд╛ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЛрдб рдкреБрд▓рд┐рд╕ рджреНрд╡рд╛рд░рд╛ рдЧрд┐рд░рдлреНрддрд╛рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдбрд░ рдХреЗ рдмрд┐рдирд╛ред рдХрдИ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ рдФрд░ рдкреИрдХреЗрдЬ рдХреЗ рднреАрддрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рдХрд░реЗрдВред
рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЖрдорддреМрд░ рдкрд░ рдУрд╡рд░-рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХреА рд╕реНрдореИрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ:
- рд╕реАрд▓рдмрдВрдж рдЗрдВрдЯрд░рдлреЗрд╕
- рд╕рд╛рд░ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░
- рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЗрдВрдЯрд░рдлреЗрд╕
рдЕрдЧрд▓рд╛, рд╣рдо рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
рд╕реАрд▓рдмрдВрдж рдЗрдВрдЯрд░рдлреЗрд╕
рдореБрд╣рд░рдмрдВрдж рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдХреЗрд╡рд▓ рдХрдИ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдПрдХ рд╕реАрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЧреИрд░-рдирд┐рд░реНрдпрд╛рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЗ рдмрд╛рд╣рд░ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред
рдпрджрд┐ рдЖрдкрдиреЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ:
type Fooer interface { Foo() sealed() }
рдХреЗрд╡рд▓
Fooer
рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреИрдХреЗрдЬ рд╣реА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рд╕реЗ рдХреБрдЫ рднреА рдореВрд▓реНрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдмреНрд░реВрдЯ-рдлреЛрд░реНрд╕ рд╕реНрд╡рд┐рдЪ рдСрдкрд░реЗрдЯрд░ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╕реАрд▓рдмрдВрдж рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЯреВрд▓ рдХреЛ рдХрд┐рд╕реА рднреА рдЧреИрд░-рдЯрдХрд░рд╛рд╡ рдкреИрдЯрд░реНрди рдкреИрдЯрд░реНрди рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓реЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
BurntSushi рдХреЗ рд╕рд╛рд░рд╛рдВрд╢ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реИред
рд╕рд╛рд░ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░
рдкрд╣рд▓реЗ рд╕реЗ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдПрдХ рдЕрдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд╛рд░ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдпрд╛ рддреЛ рд╕реАрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рд╕реАрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг
sort
рдкреИрдХреЗрдЬ рд╣реИ, рдЬреЛ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рд╕рдВрдЧреНрд░рд╣рдгреАрдп рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ
type Interface interface {
рдХреЛрдб рдХрд╛ рдпрд╣ рдЯреБрдХрдбрд╝рд╛ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрдк
sort
рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗред рдХрдИ рдХреЛ рдХреЛрдб рдХреА рддреАрди рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдпрд╣ рдЧреЛ рдореЗрдВ рдЬреЗрдиреЗрд░рд┐рдХ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрдВрджрд░ рд░реВрдк рд▓рдЧрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдЕрдзрд┐рдХ рдмрд╛рд░ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╡реИрдХрд▓реНрдкрд┐рдХ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдбрд┐рдЬрд╛рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рдЙрдЪреНрдЪ рдЖрджреЗрд╢ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╣рдо рдЙрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЗрдВрдЯрд░рдлреЗрд╕
рдпрд╣ рд╢рд╛рдпрдж рд╕реНрдЯреЙрдХ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ рдмрд╛рд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рд╕рд░рд▓ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдЖрдкрдХреЛ рдХреБрдЫ рдкрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
type Fooer interface { Foo() Fooer }
рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреИрдЯрд░реНрди рдХреЛ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдЗрд╕рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдмрд┐рдВрджреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдпрд╣рд╛рдБ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИред
рдпрд╣ рдкреИрдЯрд░реНрди рдЙрдирдореЗрдВ рдмрд╛рдж рдХреЗ рдХрд╛рдо рдХреЗ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдЖрдорддреМрд░ рдкрд░ рдХреЗрд╡рд▓ рд╕рдВрджрд░реНрднреЛрдВ (рдЕрд▓рд╛
рдЯреИрдВрд╕рд░ рдкреИрдХреЗрдЬ) рдХреЗ рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЬ рдХреЗ рдЕрдВрджрд░ рд╕рдВрд▓рдЧреНрди рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдХрд╛ рд╕рд╛рдордирд╛ рдЕрдХреНрд╕рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рдЖрдкрдХреЛ рд╕рдВрджрд░реНрдн рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдкреЛрд╕реНрдЯ рдХрд╛ рдПрдХ рд╢реАрд░реНрд╖рд▓реЗрдЦ "рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ," рдкрдврд╝рддрд╛ рд╣реИ, рдореИрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдХреБрдЫ рднреА рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдмрд▓реНрдХрд┐, рдореИрдВ рдкрд╛рдардХреЛрдВ рдХреЛ рд╕реАрдорд╛ рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдЖрдкрд╛рддрдХрд╛рд▓реАрди рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВред
рдореБрдЭреЗ рдмрд┐рдВрджреБ-рдХрд╛-рдЙрдкрдпреЛрдЧ рдШреЛрд╖рдгрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдЕрддреНрдпрдВрдд рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИред рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЗрд╕рдХреЗ рдЖрд╡реЗрджрди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореИрдВ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдореБрдЭреЗ рдЙрдкреЗрдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рднреА рдХрднреА-рдХрднрд╛рд░ рдЬрд╛рд╡рд╛-рд╢реИрд▓реА рдЗрдВрдЯрд░рдлреЗрд╕ рд▓рд┐рдЦрддрд╛ рд╣реВрдВред рдЖрдорддреМрд░ рдкрд░, рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рдЕрдЧрд░ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдЬрд╛рд╡рд╛ рдпрд╛ рдкрд╛рдпрдерди рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рд▓рд┐рдЦреЗ рдереЗред рдУрд╡рд░рдХрдореНрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдиреЗ рдФрд░ "рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдм рдХреБрдЫ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ" рдХреА рдЗрдЪреНрдЫрд╛ рдХрднреА-рдХрднреА рдмрд╣реБрдд рджреГрдврд╝рддрд╛ рд╕реЗ рдЦреБрдж рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рддреА рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк рдмрд╣реБрдд рд╕рд╛рд░реЗ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж рдЧреЛ-рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рдкреЛрд╕реНрдЯ рд╕реНрд╡рдпрдВ рдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИ рдХрд┐ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХрд╛ рдорд╛рд░реНрдЧ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдЬреЛ рдмрд╛рдж рдореЗрдВ рд╕рд┐рд░рджрд░реНрдж рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣реИ!
