рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдк рд╕реЗ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдорд╛рд░реНрд╢рд▓ рдореЗрдВ рдмрджрд▓рдирд╛ рдорд╛рд░реНрд╢рд▓ рдореЗрдВ рд╣реА рд╕рдВрднрд╡ рд╣реИ () рд╡рд┐рдзрд┐, рдорд╛рд░реНрд╢рд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХрд╛ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рдмрд┐рд▓реНрдХреБрд▓ рдХреИрд╕реЗ? рдЧреЛ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдЗрд╕ рдкрд░ рдХреЛрдИ рдЬрд╡рд╛рдм рдпрд╛ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреВрд░реНрдг рд╕реНрд╡рддрдВрддреНрд░рддрд╛ред рдФрд░ рдЗрд╕ рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдХрд╛ рд▓рд╛рдн рдХреИрд╕реЗ рдЙрдард╛рдпрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рдмреИрд╕рд╛рдЦреА рдХрд╛ рдвреЗрд░ рди рд▓рдЧреЗ, рдорд╛рд░реНрд╢рд▓ рд▓реЙрд╕рди () рдХреЛ рд╕рднреА рддрд░реНрдХ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдП рдЬрд╛рдПрдВ, рдФрд░ рдлрд┐рд░ рдЕрдЧрд▓реЗ рдЬреЛрдВрд╕ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде рдЗрд╕ рдЧрд░реАрдм рд▓рдЧрд╛рддрд╛рд░ рдмрдврд╝рддреЗ рдХрд╛рд░реНрдп рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рди рдХрд░реЗрдВ?
рд╕рдорд╛рдзрд╛рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд░рд▓ рд╣реИ:
- рдИрдорд╛рдирджрд╛рд░ (рдИрдорд╛рдирджрд╛рд░) рд░рд╣реЛред
(рджреВрд╕рд░рд╛ рдмрд┐рдВрджреБ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдкрд╣рд▓рд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред)
рдпрд╣ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдЬреЛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░рд┐рд▓реАрдЬрд╝ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЯрди рдЧреЛрд╡рдиреЛрдХреЛрдбрд╛ рднреНрд░рд╛рдордХ рдХреЛрдб, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмрджрд▓рд╛рд╡ рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА рдорд╕реНрддреА рд╕реЗ рдмрдЪрд╛рдПрдЧрд╛ ред рдЖрдЗрдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреЗрдЦреЗрдВ, рдЬрд╣рд╛рдВ рдПрдХ рд╕рд░рд▓ рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП json рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдХрдИ рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рдкреВрд░реЗ рдореЙрдбрд▓ рддрд░реНрдХ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдореВрд▓ рдХрд╛рд░реНрдп рдкрд░ред
рдХреНрдпрд╛ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрдиреА рд╕реБрд╡рд┐рдзрд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрджрд▓рдиреЗ рдФрд░ рдмреИрд╕рд╛рдЦреА рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд░рдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИ рдХрд┐ рднрд╛рд╖рд╛ рдХрдареЛрд░рддрд╛, рдЬреЛ рдХрд┐ рдЬреМрдирд╕рд┐рдЯреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рд╕реНрд╡рдпрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмреАрдЪ рдПрдХ-рд╕реЗ-рдПрдХ рдкрддреНрд░рд╛рдЪрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ, рдЕрдЪрд╛рдирдХ рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рдиреЗ рд▓рдЧреА?
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдп рдХреБрдЫ рдЕрдиреБрдореЛрджрд┐рдд рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рдРрд╕реЗ JSON рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИред рдореВрд▓ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдмреИрд╕рд╛рдЦреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рд╣рдо рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ (рд╕рдВрд░рдЪрдирд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реА рдПрдХрд▓ рдЗрдХрд╛рдИ рдХреЗ рдкрд╛рд╕ рдХрдИ рдЕрднреНрдпрд╛рд╡реЗрджрди рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреА рд╕рд╣реА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдорд┐рд▓реАред
рд╣рдореЗрдВ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрднреНрдпрд╛рд╡реЗрджрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рдЬрд╕рди рдореЗрдВ рди рдмрджрд▓реЗрдВ, рд▓реЗрдХрд┐рди рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдХрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рджреГрд╢реНрдп рд╣реИред
рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рдЗрдХрд╛рдИ рд╣реИ - рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ ред
рдФрд░ рдЪрд▓реЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдФрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреЛрдб рдХреЗ рд▓рд┐рдПред
рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд┐рддрд╛рдмреЛрдВ рдХреА рджреБрдХрд╛рди рд╣реИ рдЬреЛ рдХрд┐рддрд╛рдмреЗрдВ рдмреЗрдЪрддреА рд╣реИред рд╕рдм рдХреБрдЫ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрд╕ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдЬрд╕рди рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рдбреЗрдЯрд╛ рджреЗрддрд╛ рд╣реИред рдкреБрд╕реНрддрдХреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рдХреЗрд╡рд▓ рд╕реНрдЯреЛрд░ рдХреЗ рд╕рд╛рдордиреЗ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдлрд┐рд░ рд╣рдо рд╡рд┐рднрд┐рдиреНрди рд╕рд╣рдмрджреНрдз рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдЬреБрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдореВрд▓реНрдп рдкрд░ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдХреЗ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рддрд╛рдмреЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╣рдорд╛рд░реЗ рд╡рд┐рдкрдгрдХ рдиреЗ рдЕрдЪрд╛рдирдХ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдЪрд╛рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреА рдХреАрдордд рдФрд░ рдЦреБрдж рдХреЗ рдХреБрдЫ рдкрд╛рда рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреАрдорддреЛрдВ рдХреА рдЧрдгрдирд╛ рдФрд░ рдЧреНрд░рдВрдереЛрдВ рдХреА рддреИрдпрд╛рд░реА рдореЗрдВ рдХреБрдЫ рдЕрдиреНрдп рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдХреЛ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рджреЗрдВ, рдЬреЛ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рддреИрдпрд╛рд░ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рддреЛ, рд╣рдорд╛рд░реЗ рдкреБрд╕реНрддрдХ рдореЙрдбрд▓ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдкрдорд╛рди рддрдХ рдкрд╣реБрдБрдЪ рдЧрдпрд╛ рд╣реИ:
type Book struct { Id int64 Title string Description string Partner2Title string Price int64 PromoPrice int64 PromoDescription string Partner1Price int64 Partner2Price int64 UpdatedAt time.Time CreatedAt time.Time view BookView }
рдЕрдВрддрд┐рдо рд╡рд┐рд╢реЗрд╖рддрд╛ (рджреГрд╢реНрдп) рдЧреИрд░-рдирд┐рд░реНрдпрд╛рдд (рдирд┐рдЬреА) рд╣реИ, рдпрд╣ рдбреЗрдЯрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╣реА рджреГрд╢реНрдп рдХрд╛ рднрдВрдбрд╛рд░рдг рд╕реНрдерд╛рди рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдРрд╕реА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╕рд┐рд░реНрдл рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ {}
type BookView interface{}
рд╣рдо рдЕрдкрдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рдХреБрдЫ рд╡рд┐рдзрд┐ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░реЗрдВ (), рдЬрд┐рд╕реЗ рдорд╛рд░реНрд╢рд▓рд╕рди () рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рддреИрдпрд╛рд░, рдорд╛рдиреНрдп рдпрд╛ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВред
рдЕрдм рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдФрд░ рдХрд╛рд░реНрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ
type SiteBookView struct { Id int64 `json:"sku"` Title string `json:"title"` Description string `json:"description"` Price int64 `json:"price"` } type Partner1BookView struct { Id int64 `json:"bid"` Title string `json:"title"` Partner1Price int64 `json:"price"` } type Partner2BookView struct { Id int64 `json:"id"` Partner2Title string `json:"title"` Description string `json:"description"` Partner2Price int64 `json:"price"` } type PromoBookView struct { Id int64 `json:"ref"` Title string `json:"title"` Description string `json:"description"` PromoPrice int64 `json:"price"` PromoDescription string `json:"promo,omitempty"` } func (b Book) MarshalJSON() (data []byte, err error) {
рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЗ рдорд┐рд▓рд╛рди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк int64 рд╕реЗ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЗрдВрдЯ рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпреВрдВрдЯ рдореЗрдВ рдирд╣реАрдВред
рдЕрдВрддрд┐рдо рдЪрд░рдг json рдЯреИрдЧреНрд╕ (`json:"promo,omitempty"`)
рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рдирдХ рд╡рд┐рд╡рд░рдг рдХреА рдкреВрд░реА рд╢рдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдбреЗрдЯрд╛ рджреГрд╢реНрдп рдХреЛ рдорд╛рд░реНрд╢рд▓ рдХрд░рдирд╛ рд╣реИред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЖрд╡рд╢реНрдпрдХрддрд╛ рдореЙрдбрд▓ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдФрд░ рдореИрдкрд┐рдВрдЧ рдХрд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рдкрдВрдЬреАрдХрд░рдг рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рднреА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╣рдореЗрд╢рд╛ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИ, рдЙрдиреНрд╣реЗрдВ init () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
func init() { gob.Register(Book{}) gob.Register(SiteBookView{}) gob.Register(Partner1BookView{}) gob.Register(Partner2BookView{}) gob.Register(PromoBookView{}) }
рдкреВрд░реНрдг рдореЙрдбрд▓ рдХреЛрдб:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда import ( "bytes" "encoding/gob" "encoding/json" "time" ) func init() { gob.Register(Book{}) gob.Register(SiteBookView{}) gob.Register(Partner1BookView{}) gob.Register(Partner2BookView{}) gob.Register(PromoBookView{}) } type BookView interface{} type Book struct { Id int64 Title string Description string Partner2Title string Price int64 PromoPrice int64 PromoDescription string Partner1Price int64 Partner2Price int64 UpdatedAt time.Time CreatedAt time.Time view BookView } type SiteBookView struct { Id int64 `json:"sku"` Title string `json:"title"` Description string `json:"description"` Price int64 `json:"price"` } type Partner1BookView struct { Id int64 `json:"bid"` Title string `json:"title"` Partner1Price int64 `json:"price"` } type Partner2BookView struct { Id int64 `json:"id"` Partner2Title string `json:"title"` Description string `json:"description"` Partner2Price int64 `json:"price"` } type PromoBookView struct { Id int64 `json:"ref"` Title string `json:"title"` Description string `json:"description"` PromoPrice int64 `json:"price"` PromoDescription string `json:"promo,omitempty"` } func (b *Book) SetDefaultView() { b.SetSiteView() } func (b *Book) SetSiteView() { b.view = &SiteBookView{} } func (b *Book) SetPartner1View() { b.view = &Partner1BookView{} } func (b *Book) SetPartner2View() { b.view = &Partner2BookView{} } func (b *Book) SetPromoView() { b.view = &PromoBookView{} } func (b Book) MarshalJSON() (data []byte, err error) { if b.view == nil { b.SetDefaultView() } var buff bytes.Buffer enc := gob.NewEncoder(&buff) dec := gob.NewDecoder(&buff) err = enc.Encode(b) if err != nil { return } err = dec.Decode(b.view) if err != nil { return } return json.Marshal(b.view) }
рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдХреЛрдб рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реЛрдЧрд╛:
func GetBooksForPartner2(ctx *gin.Context) { books := LoadBooksForPartner2() for i := range books { books[i].SetPartner2View() } ctx.JSON(http.StatusOK, books) }
рдЕрдм рдПрдХ "рдПрдХ рдФрд░" рдЬреЛрдВрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП, рдмрд╕ рдПрдХ рдФрд░ рджреГрд╢реНрдп рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕реЗ init () рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВред