рдЧреЛ рдореЗрдВ рдЪрд┐рдВрддрди рдХреЗ рдирд┐рдпрдо

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рд╕реЗ рд▓реЗрдЦ "рдХрд╛рдиреВрди рдХреЗ рдкреНрд░рддрд┐рдмрд┐рдВрдм" рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВред

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

рдкреНрд░рдХрд╛рд░ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕


рдЪреВрдБрдХрд┐ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЖрдЗрдП рдЧреЛ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЬреНрдЮрд╛рди рдХреЛ рддрд╛рдЬрд╝рд╛ рдХрд░реЗрдВред
рдЧреЛ рд╕реНрдЯреЗрдЯрд┐рдХрд▓реА рдЯрд╛рдЗрдкреНрдб рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЪрд░ рдХрд╛ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдПрдХ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ: int, float32, *MyType, []byte ... рдпрджрд┐ рд╣рдо рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ:

 type MyInt int var i int var j MyInt 

рддреЛ i рдЯрд╛рдЗрдк int рдФрд░ j рдЯрд╛рдЗрдк MyInt ред рдЪрд░ i рдФрд░ j рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ рдФрд░, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдореВрд▓ рдкреНрд░рдХрд╛рд░ рд╣реИ, рд╡реЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдмрд┐рдирд╛ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдирд╣реАрдВ рд╕реМрдВрдкреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░ рдХреА рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИ, рдЬреЛ рддрд░реАрдХреЛрдВ рдХреЗ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрдЯ рд╣реИрдВред рдЬрдм рддрдХ рдпрд╣ рдорд╛рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рддрдм рддрдХ рдХреЛрдИ рднреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд┐рд╕реА рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯ (рдЧреИрд░-рдЗрдВрдЯрд░рдлрд╝реЗрд╕) рдорд╛рди рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рдЬреЛрдбрд╝реА io.Reader рдФрд░ io.Writer рд╣реИ , рдкрд╛рдардХ рдФрд░ рд▓реЗрдЦрдХ io рд╕реЗ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ:

 // Reader -  ,    Read(). type Reader interface { Read(p []byte) (n int, err error) } // Writer -  ,    Write(). type Writer interface { Write(p []byte) (n int, err error) } 

рдпрд╣ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдкреНрд░рдХрд╛рд░ рдЬреЛ рдЗрд╕ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде Read() рдпрд╛ Write() рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ io.Writer рдХреНрд░рдорд╢рдГ io.Reader рдпрд╛ io.Writer рд▓рд╛рдЧреВ io.Reader рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ io.Reader рдПрдХ рдЪрд░ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдореВрд▓реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдкрдврд╝реЗрдВ ():

 var r io.Reader r = os.Stdin r = bufio.NewReader(r) r = new(bytes.Buffer) 

рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ r рдХреЛ io.Reader рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдореВрд▓реНрдп рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЧреЛ io.Reader рдЯрд╛рдЗрдкреНрдб рд╣реИ, рдФрд░ рд╕реНрдЯреИрдЯрд┐рдХ рдЯрд╛рдЗрдк r io.Reader ред

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЕрддреНрдпрдВрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рдЦрд╛рд▓реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ:

 interface{} 

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

рдЗрд╕реЗ рд╕рдордЭрдирд╛ рд╣реЛрдЧрд╛ - рдкреНрд░рддрд┐рдмрд┐рдВрдм рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдирд┐рдХрдЯрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡


рд░рд╕ рдХреЙрдХреНрд╕ рдиреЗ рдЧреЛ рдореЗрдВ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рд▓рд┐рдЦрд╛ред рдХреЛрдИ рдХрдо рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ Habr'e рдкрд░ рдирд╣реАрдВ рд╣реИ ред рдкреВрд░реА рдХрд╣рд╛рдиреА рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

 var r io.Reader tty, err := os.OpenFile("/dev/tty", os.O_RDWR, 0) if err != nil { return nil, err } r = tty 

r рдореЗрдВ, рдпреЛрдЬрдирд╛рдмрджреНрдз рд░реВрдк рд╕реЗ, рдПрдХ рдЬреЛрдбрд╝реА (, ) --> (tty, *os.File) ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ *os.File рдкреНрд░рдХрд╛рд░ Read() рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ; рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореВрд▓реНрдп рдХреЗрд╡рд▓ рд░реАрдб () рд╡рд┐рдзрд┐ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЕрдВрджрд░ рдХрд╛ рдореВрд▓реНрдп рдЗрд╕ рдореВрд▓реНрдп рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдо рдРрд╕реА рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 var w io.Writer w = r.(io.Writer) 

рдЗрд╕ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрдерди рд╣реИ; рдпрд╣ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ r рдЕрдВрджрд░ рдХрд╛ рддрддреНрд╡ io.Writer рднреА рд▓рд╛рдЧреВ io.Writer , рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ w рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдмрд╛рд░ рд╕реМрдВрдкреЗ рдЬрд╛рдиреЗ рдкрд░, w рдореЗрдВ рдПрдХ рдЬреЛрдбрд╝рд╛ (tty, *os.File) ред рдпрд╣ r рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдЬреЛрдбрд╝реА рд╣реИред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЪрд░ рдкрд░ рдХрд┐рди рддрд░реАрдХреЛрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рддрд░реАрдХреЛрдВ рдХреЗ рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╕реЗрдЯ рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореВрд▓реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 var empty interface{} empty = w 

рдФрд░ рдЦрд╛рд▓реА рдлрд╝реАрд▓реНрдб рдХреЗ рдЦрд╛рд▓реА рдорд╛рди рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд╕рдорд╛рди рдЬреЛрдбрд╝реА (tty, *os.File) ред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ: рдПрдХ рдЦрд╛рд▓реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдХреЛрдИ рднреА рдореВрд▓реНрдп рдФрд░ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдХрднреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рджрд╛рд╡реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ w рдПрдХ рдЦрд╛рд▓реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЬрд╣рд╛рдВ рд╣рдордиреЗ Reader рд╕реЗ Writer рдореЗрдВ рд╡реИрд▓реНрдпреВ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреА рд╣реИ, рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдПрд╢реНрдпреЛрд░реЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Writer рддрд░реАрдХреЗ Reader рд╕рдмрд╕реЗрдЯ рдирд╣реАрдВ рд╣реИрдВред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рди рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдШрдмрд░рд╛рд╣рдЯ рд╣реЛрдЧреАред

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

рдЕрдм рд╣рдо рдЪрд┐рдВрддрди рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред

рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдкрд╣рд▓рд╛ рдирд┐рдпрдо рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рддрд╛ рд╣реИ


  • рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░рддрд┐рдмрд┐рдВрдм рддрдХ рдлреИрд▓реА рд╣реБрдИ рд╣реИред

рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рд╕реНрддрд░ рдкрд░, рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЪрд░ рдХреЗ рдЕрдВрджрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рдХрд╛рд░ рдФрд░ рдореВрд▓реНрдп рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХреЗрд╡рд▓ рдПрдХ рддрдВрддреНрд░ рд╣реИред рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: reflect.Value ред reflect.Type рдФрд░ reflect.Value ред рдпреЗ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЪрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд░реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдХреНрд░рдорд╢рдГред рджрд░реНрд╢рд╛рдПрдБред рдЯрд╛рдЗрдк рдХрд░реЗрдВ () рдФрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░реЗрдВред рд╡рд╛рд▓реНрдпреВрдСрдлрд╝ (), рдХреНрд░рдорд╢рдГред рд╡реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЕрд░реНрде рд╕реЗ рднрд╛рдЧреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВред (рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, reflect.Value рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред reflect.Type , рд▓реЗрдХрд┐рди рдЖрдЗрдП рдлрд┐рд▓рд╣рд╛рд▓ Value рдФрд░ Type рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рди рдорд┐рд▓рд╛рдПрдВред)

рдЪрд▓рд┐рдП TypeOf() рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

 package main import ( "fmt" "reflect" ) func main() { var x float64 = 3.4 fmt.Println("type:", reflect.TypeOf(x)) } 

рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЙрддреНрдкрд╛рджрди рд╣реЛрдЧрд╛
type: float64

рдХрд╛рд░реНрдпрдХреНрд░рдо float64 x рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЪрд░ float64 x рдХрд░рдиреЗ рдХреЗ reflect.TypeOf() ред reflect.TypeOf() ред рдХреНрдпрд╛ рдЖрдк рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреЗрдЦрддреЗ рд╣реИрдВ? рдФрд░ рдпрд╣ рд╣реИ - reflect.TypeOf() рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдЦрд╛рд▓реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:

 // TypeOf()  reflect.Type    . func TypeOf(i interface{}) Type 

рдЬрдм рд╣рдо reflect.TypeOf(x) рдХрд╣рддреЗ рд╣реИрдВред reflect.TypeOf(x) , x рдкрд╣рд▓реЗ рдПрдХ рдЦрд╛рд▓реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рддрдм рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; reflect.TypeOf() рдЯрд╛рдЗрдк рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЦрд╛рд▓реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ reflect.TypeOf() рдХрд░рддрд╛ рд╣реИред

reflect.ValueOf() рдлрд╝рдВрдХреНрд╢рди, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореВрд▓реНрдп рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЗрд╕рдХреЗ рдмрд╛рдж рд╣рдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдХреЛрдб рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ):

 var x float64 = 3.4 fmt.Println("value:", reflect.ValueOf(x).String()) 

рдЫрдк рдЬрд╛рдПрдЧрд╛
value: <float64 Value>
(рд╣рдо String() рд╡рд┐рдзрд┐ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, fmt рдкреИрдХреЗрдЬ reflect.Value рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП reflect.Value рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореВрд▓реНрдп рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред)
рджреЛрдиреЛрдВ reflect.Type рдФрд░ reflect.Value рдореЗрдВ рдХрдИ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рддрд▓рд╛рд╢рдиреЗ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рдпрд╣ рд╣реИ рдХрд┐ reflect.Value рдореЗрдВ рдПрдХ Type() рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдореВрд▓реНрдп рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИред reflect.Type рдФрд░ reflect.Value рдореЗрдВ рдПрдХ reflect.Value Kind() рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдПрдХ рдирд┐рд░рдВрддрд░ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдЖрджрд┐рдо рддрддреНрд╡ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ: Uint, Float64, Slice ... рдпреЗ рд╕реНрдерд┐рд░рд╛рдВрдХ Uint, Float64, Slice рдкреИрдХреЗрдЬ рдореЗрдВ рдЧрдгрдирд╛ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред Int() рдФрд░ Float() рдЬреИрд╕реЗ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде Value рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣рдореЗрдВ рдорд╛рдиреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ (рдЬреИрд╕реЗ рдХрд┐ int64 рдФрд░ float64) рд╕рдВрд▓рдЧреНрди:

 var x float64 = 3.4 v := reflect.ValueOf(x) fmt.Println("type:", v.Type()) fmt.Println("kind is float64:", v.Kind() == reflect.Float64) fmt.Println("value:", v.Float()) 

рдЫрдк рдЬрд╛рдПрдЧрд╛

 type: float64 kind is float64: true value: 3.4 

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

рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХреБрдЫ рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдкреАрдЖрдИ рдХреЛ рд╕рд░рд▓ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, "рдЧреЗрдЯреНрдЯрд░" рдФрд░ "рд╕реЗрдЯрд░" Value рд╡рд┐рдзрд┐рдпрд╛рдВ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рдкреНрд░рдХрд╛рд░ рдкрд░ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдореВрд▓реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рд╕рднреА int64 рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд▓рд┐рдП int64 ред рдЕрд░реНрдерд╛рдд, Value рдорд╛рди рдХрд╛ Int() рд╡рд┐рдзрд┐ int64 рджреЗрддрд╛ рд╣реИ, рдФрд░ SetInt() рдорд╛рди int64 рд▓реЗрддрд╛ рд╣реИ; рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ:

 var x uint8 = 'x' v := reflect.ValueOf(x) fmt.Println("type:", v.Type()) fmt.Println("kind is uint8: ", v.Kind() == reflect.Uint8) x = uint8(v.Uint()) // v.Uint  uint64. 

рд╣реЛрдЧрд╛

 type: uint8 kind is uint8: true 

рдпрд╣рд╛рдБ v.Uint() uint64 , рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рджреВрд╕рд░реА рд╕рдВрдкрддреНрддрд┐ рдпрд╣ рд╣реИ рдХрд┐ Kind() рд╡рд╕реНрддреБ рдХрд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рд╕реНрдереИрддрд┐рдХ рдкреНрд░рдХрд╛рд░ред рдпрджрд┐ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдорд╛рди рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐

 type MyInt int var x MyInt = 7 v := reflect.ValueOf(x) // v   Value. 

v.Kind() == reflect.Int , рд╣рд╛рд▓рд╛рдВрдХрд┐ x рдХрд╛ рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд░ MyInt , int рдирд╣реАрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, Kind() Type() MyInt , MyInt рд╕реЗ int рдХреЛ рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред Kind рдХреЗрд╡рд▓ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рджреВрд╕рд░рд╛ рдирд┐рдпрдо рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рддрд╛ рд╣реИ


  • рдкрд░рд╛рд╡рд░реНрддрди рдкрд░рд╛рд╡рд░реНрддрд┐рдд рд╡рд╕реНрддреБ рд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрдХ рдлреИрд▓рд╛ рд╣реБрдЖ рд╣реИред

рднреМрддрд┐рдХ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреА рддрд░рд╣, рдЧреЛ рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдмрдирд╛рддрд╛ рд╣реИред

reflect.Value рд╣реЛрдиреЗ рдХреЗ рдмрд╛рджред рд╣рдо, Interface() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рд╡рд┐рдзрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╡рд╛рдкрд╕ рдкреНрд░рдХрд╛рд░ рдФрд░ рдореВрд▓реНрдп рдЬрд╛рдирдХрд╛рд░реА рдкреИрдХ рдХрд░рддреА рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рддреА рд╣реИ:

 // Interface   v  interface{}. func (v Value) Interface() interface{} 
BVT
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ:

 y := v.Interface().(float64) // y   float64. fmt.Println(y) 

float64 рдХреЗ рдорд╛рди рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рдЬреЛ рд╡рд╕реНрддреБ v рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдФрд░ рднреА рдмреЗрд╣рддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред fmt.Println() рдФрд░ fmt.Printf() рдореЗрдВ рддрд░реНрдХреЛрдВ рдХреЛ рдЦрд╛рд▓реА рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдмрд╛рдж рдореЗрдВ fmt рдкреИрдХреЗрдЬ рджреНрд╡рд╛рд░рд╛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдирдкреИрдХ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рддрд░рд╣ред рдЗрд╕рд▓рд┐рдП, рд╡рд╣ рд╕рдм рдЬреЛ reflect.Value рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕реНрд╡рд░реВрдкрд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП Interface() рд╡рд┐рдзрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реИ:

 fmt.Println(v.Interface()) 

( fmt.Println(v) рдХреНрдпреЛрдВ рдирд╣реАрдВ? fmt.Println(v) ; рдХреНрдпреЛрдВрдХрд┐ v рдкреНрд░рдХрд╛рд░ рдХреЗ reflect.Value ред reflect.Value ; рд╣рдо рдЕрдВрджрд░ рдирд┐рд╣рд┐рдд рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред) рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░рд╛ рдорд╛рди float64 , рд╣рдо рдЪрд╛рд╣реЗрдВ рддреЛ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 fmt.Printf("value is %7.1e\n", v.Interface()) 

рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛
3.4e+00

рдлрд┐рд░, рдкрд░рд┐рдгрд╛рдо рдкреНрд░рдХрд╛рд░ v.Interface() рдХреЛ float64 рдореЗрдВ float64 ; рдПрдХ рдЦрд╛рд▓реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдорд╛рди рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореВрд▓реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ, рдФрд░ fmt.Printf() рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, Interface() рд╡рд┐рдзрд┐ ValueOf() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд┐рд▓реЛрдо рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣рдореЗрд╢рд╛ рд╕реНрдЯреИрдЯрд┐рдХ рдЯрд╛рдЗрдк interface{} ред

рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐: рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╡рд╕реНрддреБрдУрдВ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рддрдХ рдлреИрд▓реА рд╣реБрдИ рд╣реИред

рдкрд░рд╛рд╡рд░реНрддрди рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рддреАрд╕рд░рд╛ рдирд┐рдпрдо


  • рдкрд░рд╛рд╡рд░реНрддрди рд╡рд╕реНрддреБ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдорд╛рди рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рддреАрд╕рд░рд╛ рдирд┐рдпрдо рд╕рдмрд╕реЗ рд╕реВрдХреНрд╖реНрдо рдФрд░ рднреНрд░рд╛рдордХ рд╣реИред рд╣рдо рдкрд╣рд▓реЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдХреЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред

 var x float64 = 3.4 v := reflect.ValueOf(x) v.SetFloat(7.1) //  

рдпрджрд┐ рдЖрдк рдпрд╣ рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдШрдмрд░рд╛рд╣рдЯ рд╕реЗ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛:
panic: reflect.Value.SetFloat
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╢рд╛рдмреНрджрд┐рдХ 7.1 рдкрддрд╛ рдирд╣реАрдВ рд╣реИ; рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ v рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ v рдирд╣реАрдВ рд╣реИред reflect.Value рдХреА рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИред reflect.Value , рдФрд░ рд╣рд░ reflect.Value рдирд╣реАрдВред reflect.Value рдореЗрдВ рдпрд╣ рд╣реИред
reflect.Value.CanSet() рд╡рд┐рдзрд┐ рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ reflect.Value.CanSet() ; рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ:

 var x float64 = 3.4 v := reflect.ValueOf(x) fmt.Println("settability of v:", v.CanSet()) 

рдкреНрд░рд┐рдВрдЯ рд╣реЛрдЧрд╛:
settability of v: false

рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдорд╛рди рдкрд░ Set() рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИред рд▓реЗрдХрд┐рди рдХрд┐рд╕реНрддрдиреАрдпрддрд╛ рдХреНрдпрд╛ рд╣реИ?

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

 var x float64 = 3.4 v := reflect.ValueOf(x) 

рд╣рдо reflect.ValueOf() рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП x рдХреА рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред reflect.ValueOf() , рдЗрд╕рд▓рд┐рдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ reflect.ValueOf() рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред reflect.ValueOf() - рдпрд╣ x рдХреА рдПрдХ рдкреНрд░рддрд┐ рд╣реИ, рди рдХрд┐ рд╕реНрд╡рдпрдВ x ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рдХрдерди:

 v.SetFloat(7.1) 

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

рдпрд╣ рдЕрдЬреАрдм рдирд╣реАрдВ рд▓рдЧрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрд╕рд╛рдорд╛рдиреНрдп рдХрдкрдбрд╝реЛрдВ рдореЗрдВ рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рд╣реИред рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ x рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
f(x)

рд╣рдо x рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ f() рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ x рдХреЗ рдореВрд▓реНрдп рдХреА рдПрдХ рдкреНрд░рддрд┐ рдкрд╛рд░рд┐рдд рдХреА рд╣реИ, рди рдХрд┐ рд╕реНрд╡рдпрдВ x ред рдЕрдЧрд░ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ f() рд╕реАрдзреЗ x рдХреЛ рдмрджрд▓реЗ, рддреЛ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ x рдХреЛ рдкреЙрдЗрдВрдЯрд░ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
f(&x)

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

рдЪрд▓реЛ рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ x рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдПрдХ reflect.Value p рдмрдирд╛рддреЗ рд╣реИрдВред reflect.Value p рдЬреЛ рдЗрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред

 var x float64 = 3.4 p := reflect.ValueOf(&x) //   x. fmt.Println("type of p:", p.Type()) fmt.Println("settability of p:", p.CanSet()) 

рдЙрддреНрдкрд╛рджрди рд╣реЛрдЧрд╛
type of p: *float64
settability of p: false


рдкрд░рд╛рд╡рд░реНрддрди рдСрдмреНрдЬреЗрдХреНрдЯ p рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣ p рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╣ рдкреЙрдЗрдВрдЯрд░ *p ред рдХреНрдпрд╛ p рдЕрдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВред рдореВрд▓реНрдп Value.Elem() рд╡рд┐рдзрд┐, рдЬреЛ рд╕реВрдЪрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдореВрд▓реНрдп рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ reflect.Value v ред reflect.Value v :

 v := p.Elem() fmt.Println("settability of v:", v.CanSet()) 

рдЕрдм v рдПрдХ рд╕рдВрд╕реНрдерд╛рдкрди рдпреЛрдЧреНрдп рд╡рд╕реНрддреБ рд╣реИ;
settability of v: true
рдФрд░ рдЪреВрдВрдХрд┐ рдпрд╣ x рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдЕрдВрдд рдореЗрдВ x рдХрд╛ рдорд╛рди рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП v.SetFloat() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 v.SetFloat(7.1) fmt.Println(v.Interface()) fmt.Println(x) 

рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдирд┐рд╖реНрдХрд░реНрд╖
7.1
7.1

рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХреЛ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣реА рдХрд░рддрд╛ рд╣реИ рдЬреЛ рднрд╛рд╖рд╛ рдХрд░рддреА рд╣реИ, reflection.Value рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рдпрджреНрдпрдкрд┐ред reflect.Type рдФрд░ reflection.Value ред reflect.Type , рдЬреЛ рдЫрд┐рдкрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдмрд╕ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ reflection.Value ред рд╡рд╛рд▓реНрдпреВ рдХреЛ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд░ рдХреЗ рдкрддреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕рдВрд░рдЪрдирд╛


рд╣рдорд╛рд░реЗ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, v рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдирд╣реАрдВ v , рдпрд╣ рд╕рд┐рд░реНрдл рдЗрд╕рд╕реЗ рдирд┐рдХрд▓рд╛ рдерд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдЬрдм рддрдХ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкрддрд╛ рд╣реИ, рд╣рдо рдЗрд╕рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

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

 type T struct { A int B string } t := T{23, "skidoo"} s := reflect.ValueOf(&t).Elem() typeOfT := s.Type() for i := 0; i < s.NumField(); i++ { f := s.Field(i) fmt.Printf("%d: %s %s = %v\n", i, typeOfT.Field(i).Name, f.Type(), f.Interface()) } 

рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЙрддреНрдкрд╛рджрди рд╣реЛрдЧрд╛
0: A int = 23
1: B string = skidoo

рдХрд┐рд╕реНрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдФрд░ рдмрд╛рдд рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рдИ рдЧрдИ рд╣реИ: рдКрдкрд░реА рдХреНрд╖реЗрддреНрд░ (рдирд┐рд░реНрдпрд╛рдд) рдореЗрдВ T рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рдирд╛рдо, рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдлрд╝реАрд▓реНрдб рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИрдВред
рдЪреВрдБрдХрд┐ s рдореЗрдВ рдПрдХ рд╕рдВрд╕реНрдерд╛рдкрд┐рдд рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╡рд╕реНрддреБ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдВрд░рдЪрдирд╛ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

 s.Field(0).SetInt(77) s.Field(1).SetString("Sunset Strip") fmt.Println("t is now", t) 

рдкрд░рд┐рдгрд╛рдо:
t is now {77 Sunset Strip}
рдпрджрд┐ рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ s t &t t рдмрдЬрд╛рдп t рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ t , рддреЛ SetInt() рдФрд░ SetString() рдХреЗ рдХреЙрд▓ рдШрдмрд░рд╛рд╣рдЯ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдлрд╝реАрд▓реНрдб t SetString() рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

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


рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ:

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

рд░реЛрдм рдкрд╛рдЗрдХ рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

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


All Articles