рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рд╕реЗ рд▓реЗрдЦ
"рдХрд╛рдиреВрди рдХреЗ рдкреНрд░рддрд┐рдмрд┐рдВрдм" рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВред
рдкрд░рд╛рд╡рд░реНрддрди рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдЕрдкрдиреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдпрд╣ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдПрдХ рд░реВрдк рд╣реИ рдФрд░ рднреНрд░рдо рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕реНрд░реЛрдд рд╣реИред
рдЧреЛ рдореЗрдВ, рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд░реАрдХреНрд╖рдг рдФрд░ 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 рд╕реЗ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ:
рдпрд╣ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдкреНрд░рдХрд╛рд░ рдЬреЛ рдЗрд╕ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде
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()
рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдЦрд╛рд▓реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:
рдЬрдм рд╣рдо
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())
рд╣реЛрдЧрд╛
type: uint8 kind is uint8: true
рдпрд╣рд╛рдБ
v.Uint()
uint64
, рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рджреВрд╕рд░реА рд╕рдВрдкрддреНрддрд┐ рдпрд╣ рд╣реИ рдХрд┐
Kind()
рд╡рд╕реНрддреБ рдХрд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рд╕реНрдереИрддрд┐рдХ рдкреНрд░рдХрд╛рд░ред рдпрджрд┐ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдорд╛рди рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐
type MyInt int var x MyInt = 7 v := reflect.ValueOf(x)
v.Kind() == reflect.Int
, рд╣рд╛рд▓рд╛рдВрдХрд┐
x
рдХрд╛ рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд░
MyInt
,
int
рдирд╣реАрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ,
Kind()
Type()
MyInt
,
MyInt
рд╕реЗ
int
рдХреЛ рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
Kind
рдХреЗрд╡рд▓ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рджреВрд╕рд░рд╛ рдирд┐рдпрдо рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рддрд╛ рд╣реИ
- рдкрд░рд╛рд╡рд░реНрддрди рдкрд░рд╛рд╡рд░реНрддрд┐рдд рд╡рд╕реНрддреБ рд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрдХ рдлреИрд▓рд╛ рд╣реБрдЖ рд╣реИред
рднреМрддрд┐рдХ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреА рддрд░рд╣, рдЧреЛ рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдмрдирд╛рддрд╛ рд╣реИред
reflect.Value
рд╣реЛрдиреЗ рдХреЗ рдмрд╛рджред рд╣рдо,
Interface()
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рд╡рд┐рдзрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╡рд╛рдкрд╕ рдкреНрд░рдХрд╛рд░ рдФрд░ рдореВрд▓реНрдп рдЬрд╛рдирдХрд╛рд░реА рдкреИрдХ рдХрд░рддреА рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рддреА рд╣реИ:
BVT
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ:
y := v.Interface().(float64)
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)
рдЙрддреНрдкрд╛рджрди рд╣реЛрдЧрд╛
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()
рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ:
- рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░рддрд┐рдмрд┐рдВрдм рддрдХ рдлреИрд▓реА рд╣реБрдИ рд╣реИред
- рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрдХ рдлреИрд▓рддрд╛ рд╣реИред
- рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╡рд╕реНрддреБ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдорд╛рди рд╕реЗрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд░реЛрдм рдкрд╛рдЗрдХ рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ред