Go เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดตเตเดฏเดตเดธเดพเดฏเดคเตเดคเดฟเดจเตเดณเตเดณ เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเตป เดตเดฟเด•เดธเดจเด‚. เดญเดพเด—เด‚ 1

เดจเดพเดฒเต เดฎเดพเดธเดฎเดพเดฏเดฟ เดžเดพเตป "เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเตป เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ เด—เดตเตบเดฎเต†เดจเตเดฑเต, เดตเตเดฏเดพเดตเดธเดพเดฏเดฟเด• เดฎเต‡เด–เดฒเด•เดณเดฟเดฒเต† เดกเดพเดฑเตเดฑเดพ เดชเตเดฐเตŠเดŸเตเดŸเด•เตเดทเตป เด†เตปเดกเต เดฎเดพเดจเต‡เดœเตเดฎเต†เดจเตเดฑเต เดŸเต‚เดณเตเด•เดณเตเดŸเต† เดตเดฟเด•เดธเดจเด‚" เดŽเดจเตเดจ เดชเต‡เดฐเดฟเตฝ เด’เดฐเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต.
เดˆ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดžเดพเตป เดŽเด™เตเด™เดจเต† เด†เดฐเด‚เดญเดฟเดšเตเดšเต เดŽเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด‡เดชเตเดชเต‹เตพ เดจเดฟเด™เตเด™เดณเต‹เดŸเต เดชเดฑเดฏเดพเตป เดžเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต, เด‡เดชเตเดชเต‹เตพ เดžเดพเตป เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เด•เต‹เดกเต เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดตเดฟเดตเดฐเดฟเด•เตเด•เตเด‚.

Go เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดตเตเดฏเดตเดธเดพเดฏเดคเตเดคเดฟเดจเตเดณเตเดณ เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเตป เดตเดฟเด•เดธเดจเด‚. เดญเดพเด—เด‚ 1

เดฒเต‡เด–เดจ เดชเดฐเดฎเตเดชเดฐเดฏเดฟเดฒเต† เด†เดฆเตเดฏ เดฒเต‡เด–เดจเดฎเดพเดฃเดฟเดคเต. เด‡เดตเดฟเดŸเต† เดžเดพเตป เดธเต†เตผเดตเดฑเตเด‚ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เดณเตเด‚ เดตเดฟเดตเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ, เดˆ เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเตป เด˜เดŸเด•เด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ เดชเดคเดฟเดชเตเดชเตเด•เตพ เดชเต‹เดฒเตเด‚ เดตเดพเดฏเดจเด•เตเด•เดพเดฐเดจเต เดŽเดดเตเดคเดพเตป เด•เดดเดฟเดฏเตเด‚.

เดชเดฟเดจเตเดจเต† เด‡เดคเดพ เดฐเดฃเตเดŸเดพเด‚ เดญเดพเด—เด‚ โ€” เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเตป, เดŸเตเดฐเดพเตปเดธเดพเด•เตเดทเตป เดกเดพเดฑเตเดฑเดพ เด˜เดŸเดจเด•เตพ, เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเดฎเดพเดฏเตเดณเตเดณ เด‡เดŸเดชเต†เดŸเตฝ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจ เดชเดพเด•เตเด•เต‡เดœเต เดŽเดจเตเดจเดฟเดตเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเด‚.

เด•เดดเดฟเดžเตเดž เดตเตผเดทเด‚, เดกเดฟเดœเดฟเดฑเตเดฑเตฝ เดฌเตเดฐเต‡เด•เตเด•เตโ€Œเดคเตเดฐเต‚ เดนเดพเด•เตเด•เดคเตเดคเต‹เดฃเดฟเตฝ, เดกเดฟเดธเตเดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเดกเต เดฒเต†เดกเตเดœเตผ เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดตเตเดฏเดตเดธเดพเดฏเดคเตเดคเดฟเดจเตเด‚ เดกเดฟเดœเดฟเดฑเตเดฑเตฝ เดธเดฎเตเดชเดฆเตโ€Œเดตเตเดฏเดตเดธเตเดฅเดฏเตเด•เตเด•เตเด‚ เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดฎเดพเดฏ เด’เดฐเต เดธเด‚เดตเดฟเดงเดพเดจเด‚ เด‰เดฃเตเดŸเดพเด•เตเด•เดพเดจเตเดณเตเดณ เด’เดฐเต เด†เดถเดฏเด‚ เด…เดตเตผ เด•เตŠเดฃเตเดŸเตเดตเดจเตเดจเต; เด‡เดจเตเดจเตŠเดตเต‡เดทเตป เด…เดธเดฟเดธเตเดฑเตเดฑเตปเดธเต เดซเต—เดฃเตเดŸเต‡เดทเดจเตเดฑเต† เดตเดฟเด•เดธเดจเดคเตเดคเดฟเดจเต เด—เตเดฐเดพเดจเตเดฑเตเด‚ เดจเตฝเด•เดฟ (เดžเดพเตป เดชเตเดฐเดคเตเดฏเต‡เด•เด‚ เดŽเดดเตเดคเดฃเด‚. เด—เตเดฐเดพเดจเตเดฑเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดฒเต‡เด–เดจเด‚, เดธเตเดฑเตเดฑเดพเตผเดŸเตเดŸเดชเตเดชเตเด•เตพ เดšเต†เดฏเตเดฏเดพเตป เดคเตเดŸเด™เตเด™เตเดจเตเดจเดตเตผเด•เตเด•เดพเดฏเดฟ ), เด‡เดชเตเดชเต‹เตพ เด•เตเดฐเดฎเดคเตเดคเดฟเตฝ.

เดตเดฟเด•เดธเดจเด‚ เด—เต‹ เดญเดพเดทเดฏเดฟเตฝ เดจเดŸเด•เตเด•เตเดจเตเดจเต, เดฌเตเดฒเต‹เด•เตเด•เตเด•เตพ เดธเด‚เดญเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต LevelDB เด†เดฃเต.
เดชเตเดฐเดงเดพเดจ เดญเดพเด—เด™เตเด™เตพ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ, เดธเต†เตผเดตเตผ (เดŸเดฟเดธเดฟเดชเดฟเดฏเตเด‚ เดตเต†เดฌเตโ€Œเดธเต‹เด•เตเด•เดฑเตเดฑเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดตเดฏเดพเดฃเต - เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเตป เดธเดฎเดจเตเดตเดฏเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด†เดฆเตเดฏเดคเตเดคเต‡เดคเต, เด•เตเดฒเดฏเดจเตเดฑเตเด•เดณเต† เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต‡เดคเต, เดœเดพเดตเดพเดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เด‡เดŸเดชเดพเดŸเตเด•เดณเตเด‚ เด•เดฎเดพเตปเดกเตเด•เดณเตเด‚ เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต.

เดธเต‚เดšเดฟเดชเตเดชเดฟเดšเตเดšเดคเตเดชเต‹เดฒเต†, เดˆ เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเตป เดชเตเดฐเดพเดฅเดฎเดฟเด•เดฎเดพเดฏเดฟ เดตเดฟเดคเดฐเดฃเด•เตเด•เดพเดฐเตเด‚ เด‰เดชเดญเต‹เด•เตเดคเดพเด•เตเด•เดณเตเด‚ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เด‰เตฝเดชเตเดชเดจเตเดจเด™เตเด™เดณเตเดŸเต† เด•เตˆเดฎเดพเดฑเตเดฑเด‚ เด“เดŸเตเดŸเต‹เดฎเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ เดชเดฐเดฟเดฐเด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด’เดฐเต เดตเตเดฏเด•เตเดคเดฟเดฏเดฟเตฝ เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เดˆ เด†เดณเตเด•เตพ เดชเดฐเดธเตเดชเดฐเด‚ เดตเดฟเดถเตเดตเดธเดฟเด•เตเด•เดพเตป เดคเดฟเดŸเตเด•เตเด•เด‚ เด•เดพเดฃเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ. เดŽเดจเตเดจเดพเตฝ เดšเตเดฎเดคเดฒ เด’เดฐเต เดฌเดฟเตฝเดฑเตเดฑเต-เด‡เตป เด•เดพเตฝเด•เตเด•เตเดฒเต‡เดฑเตเดฑเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด’เดฐเต "เดšเต†เด•เตเด•เตเดฌเตเด•เตเด•เต" เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด• เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เด‰เตฝเดชเตเดชเดจเตเดจ เดœเต€เดตเดฟเดค เดšเด•เตเดฐเดคเตเดคเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เด‰เดฃเตเดŸเดพเด•เตเดจเตเดจ เดฎเดฟเด•เตเด• เดชเดคเดฟเดตเต เดœเต‹เดฒเดฟเด•เดณเตเด‚ เด“เดŸเตเดŸเต‹เดฎเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจ เด’เดฐเต เดธเดฟเดธเตเดฑเตเดฑเด‚. เดฌเตเดฒเต‹เด•เตเด•เตโ€Œเดšเต†เดฏเดฟเดจเตเด•เดณเดฟเตฝ เดชเดคเดฟเดตเตเดณเตเดณเดคเตเดชเต‹เดฒเต†, เดˆ เด•เดพเดฐเตเดฏเดคเตเดคเดฟเดจเต เด‰เดคเตเดคเดฐเดตเดพเดฆเดฟเดฏเดพเดฏ เดฌเตˆเดฑเตเดฑเตเด•เต‹เดกเต เด‡เดŸเดชเดพเดŸเตเด•เดณเตเดŸเต† เด‡เตปเดชเตเดŸเตเดŸเตเด•เดณเดฟเดฒเตเด‚ เด”เดŸเตเดŸเตโ€ŒเดชเตเดŸเตเดŸเตเด•เดณเดฟเดฒเตเด‚ เดธเด‚เดญเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต (เด‡เดŸเดชเดพเดŸเตเด•เตพ เดฌเตเดฒเต‹เด•เตเด•เตเด•เดณเดฟเตฝ เดธเด‚เดญเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เดฒเต†เดตเตฝเดกเดฟเดฌเดฟเดฏเดฟเดฒเต† เดฌเตเดฒเต‹เด•เตเด•เตเด•เตพ GOB เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเตฝ เดฎเตเตปเด•เต‚เดŸเตเดŸเดฟ เดŽเตปเด•เต‹เดกเต เดšเต†เดฏเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต). เด†เดฆเตเดฏเด‚, เดจเดฎเตเด•เตเด•เต เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ, เดธเต†เตผเดตเตผ (เดจเต‹เดกเต) เดŽเดจเตเดจเดฟเดตเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เดพเด‚.

เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดฒเตเดฒ, เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เด•เดฎเดพเตปเดกเต เดฒเตˆเดจเดฟเดจเต เดชเตเดฐเดคเดฟเด•เดฐเดฃเดฎเดพเดฏเดฟ เดšเดฟเดฒ เดกเดพเดฑเตเดฑ, เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เด’เดฐเต เดฌเตเดฒเต‹เด•เตเด•เต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด‡เดŸเดชเดพเดŸเต เดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจ เดฐเต€เดคเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เดฎเดพเดฑเตเด• เดŽเดจเตเดจเดคเดพเดฃเต เด…เดคเดฟเดจเตเดฑเต† เดฎเตเดดเตเดตเตป เดชเต‹เดฏเดฟเดจเตเดฑเตเด‚, เด•เต‚เดŸเดพเดคเต† เด‡เตปเดตเต†เดจเตเดฑเดฑเดฟ เด•เตˆเดฎเดพเดฑเตเดฑเดคเตเดคเดฟเดจเตเด‚ เด‡เดคเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต, เด…เดคเดฟเดจเดพเตฝ เด‡เดคเต เด†เดฐเดพเดฃเต†เดจเตเดจเต เดจเต‹เดกเดฟเดจเต เด…เดฑเดฟเดฏเดพเด‚. เดŽเดจเตเดจเดคเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดตเตผเด•เตเด•เต เดŽเด™เตเด™เดจเต† เดฌเดฟเดธเดฟเดจเดธเตเดธเต เดšเต†เดฏเตเดฏเดพเดจเตเดฃเตเดŸเต (เดธเดฟเตปเด•เตเดฐเตŠเดฃเตˆเดธเต‡เดทเตป เดธเต†เดทเดจเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดณเตเดณ เดจเต‹เดกเตเด•เดณเต† "เด…เดฏเตฝเด•เตเด•เดพเดฐเตป" เดŽเดจเตเดจเตเด‚ เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเต, เด•เดพเดฐเดฃเด‚ เด…เดตเดฐเตเดŸเต† เดเดชเดฟ เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเดคเตเด‚ เด…เดตเดฐเตเดŸเต† เดธเตเดฑเตเดฑเต‡เดฑเตเดฑเต เดกเดพเดฑเตเดฑ เดฎเต†เดฎเตเดฎเดฑเดฟเดฏเดฟเตฝ เดธเต‚เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเตเดฎเดพเดฃเต).

Go เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตผเดฎเดพเดฐเตเดŸเต† เดงเดพเดฐเดฃเดฏเดฟเดฒเต† เดซเต‹เตพเดกเดฑเตเด•เดณเต† (เดฒเดฟเดจเด•เตเดธเต เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจ เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟเด•เตพ) เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เดŽเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ เดˆ เดกเดฏเดฑเด•เตเดŸเดฑเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ Go เด•เต‹เดกเต เด‰เดณเตเดณ เด“เดฐเต‹ เดซเดฏเดฒเดฟเดจเตเดฑเต†เดฏเตเด‚ เดคเตเดŸเด•เตเด•เดคเตเดคเดฟเตฝ เด…เดตเตผ เดชเดพเด•เตเด•เต‡เดœเต folder_name_where_this_file เดŽเดจเตเดจเต เดŽเดดเตเดคเตเดจเตเดจเต. เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เด‚เดชเตˆเดฒเดฑเดฟเดฒเต‡เด•เตเด•เต เดชเดพเด•เตเด•เต‡เดœเต เดจเตฝเด•เดพเดจเดพเดตเดฟเดฒเตเดฒ. เดถเดฐเดฟ, เดˆ เดญเดพเดท เด…เดฑเดฟเดฏเตเดจเตเดจเดตเตผเด•เตเด•เต เด‡เดคเต เดฐเดนเดธเตเดฏเดฎเดฒเตเดฒ. เด‡เดตเดฏเดพเดฃเต เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ:

  • เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เด†เดถเดฏเดตเดฟเดจเดฟเดฎเดฏเด‚ (เดธเต†เตผเดตเตผ, เด•เตเดฒเดฏเดจเตเดฑเต, เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ)
  • เดธเด‚เดญเดฐเดฟเดšเตเดšเดคเตเด‚ เด•เตˆเดฎเดพเดฑเดฟเดฏเดคเตเดฎเดพเดฏ เดกเดพเดฑเตเดฑเดฏเตเดŸเต† เด˜เดŸเดจเด•เตพ (เดฌเตเดฒเต‹เด•เตเด•เต, เด‡เดŸเดชเดพเดŸเต)
  • เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต (เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเตป)
  • เดธเดฎเดตเดพเดฏเด‚
  • เด…เดŸเตเด•เตเด•เดฟเดฏ เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เตป (xvm)
  • เด“เด•เตเดธเดฟเดฒเดฑเดฟ (เด•เตเดฐเดฟเดชเตเดฑเตเดฑเต‹, เดคเดฐเด™เตเด™เตพ) เด‡เดชเตเดชเต‹เตพ เด…เดคเตเดฐเดฎเดพเดคเตเดฐเด‚.

github-เดฒเต‡เด•เตเด•เตเดณเตเดณ เดฒเดฟเด™เตเด•เต เด‡เดคเดพ

เด‡เดคเตŠเดฐเต เดตเดฟเดฆเตเดฏเดพเดญเตเดฏเดพเดธ เดชเดคเดฟเดชเตเดชเดพเดฃเต, เด‡เดคเดฟเดจเต เด‡เดจเตเดฑเตผ-เดชเตเดฐเต‹เดธเดธเต เด‡เดจเตเดฑเดฑเดพเด•เตเดทเดจเตเด‚ เดจเดฟเดฐเดตเดงเดฟ เดชเดฐเต€เด•เตเดทเดฃเดพเดคเตเดฎเด• เด˜เดŸเด•เด™เตเด™เดณเตเด‚ เด‡เดฒเตเดฒ, เดชเด•เตเดทเต‡ เด˜เดŸเดจ เดตเดฟเด•เดธเดจเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจ เด’เดจเตเดจเดฟเดจเต‹เดŸเต เดฏเต‹เดœเดฟเด•เตเด•เตเดจเตเดจเต. เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เดณเดฟเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฟเด•เตเด•เดพเดจเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เด•เต‚เดŸเตเดคเตฝ เดตเดฟเด•เดธเดจเดคเตเดคเดฟเตฝ เด…เดคเต เด•เดฃเด•เตเด•เดฟเดฒเต†เดŸเตเด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เดŽเดจเดฟเด•เตเด•เต เดธเดจเตเดคเต‹เดทเดฎเตเดฃเตเดŸเต. เด‡เดชเตเดชเต‹เตพ เดธเต†เตผเดตเดฑเดฟเดจเตเดฑเต† เดตเดฟเดถเดฆเต€เด•เดฐเดฃเดคเตเดคเดฟเดจเดพเดฏเดฟ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เต‹เตพ.

เด†เดฆเตเดฏเด‚ เดจเดฎเตเด•เตเด•เต เดธเต†เตผเดตเตผ เดจเต‹เด•เตเด•เดพเด‚.

เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เดชเดพเด•เตเด•เต‡เดœเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดกเดพเดฑเตเดฑเดพ เด˜เดŸเดจเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต TCP เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เดณเดฟเดจเต เดฎเตเด•เดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดกเดพเดฑเตเดฑ เดธเต†เตผเดตเดฑเดพเดฏเดฟ เดธเต†เตผเดตเตผ เดธเดฌเตเดฑเต‚เดŸเตเดŸเต€เตป เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต.

เดชเดคเดฟเดตเต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต: เดธเต†เตผเดตเตผ, เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เต‹เตพ, เดคเดฐเด‚. เดชเดพเด•เตเด•เต‡เดœเดฟเตฝ เดคเดจเตเดจเต† tcp_server.go เดกเดพเดฑเตเดฑ เด˜เดŸเดจ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เดธเต‡เดตเดฟเด•เตเด•เตเด•.

type Serve struct {
	Port string
	BufSize int
	ST *types.Settings
}

เด‡เดคเดฟเดจเต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚:

  • เดกเดพเดฑเตเดฑ เด•เตˆเดฎเดพเดฑเตเดฑเด‚ เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเดจเตเดจ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดชเต‹เตผเดŸเตเดŸเต
  • JSON เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเดฒเตเดณเตเดณ เดธเต†เตผเดตเตผ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเตฝ
  • เดกเต€เดฌเด—เต เดฎเต‹เดกเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดซเตเดฒเดพเด—เต (เดธเตเดตเด•เดพเดฐเตเดฏ เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเตป)

เดชเตเดฐเต‹เด—เดคเดฟ:

  • JSON เดซเดฏเดฒเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดตเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเต
  • เดกเต€เดฌเด—เต เดฎเต‹เดกเต เดซเตเดฒเดพเด—เต เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเต: เด‡เดคเต เดธเดœเตเดœเต€เด•เดฐเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดธเดฟเตปเด•เตเดฐเตŠเดฃเตˆเดธเต‡เดทเตป เดทเต†เดกเตเดฏเต‚เดณเตผ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เดฟเดฒเตเดฒ, เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเตป เดฒเต‹เดกเตเดšเต†เดฏเตเดฏเดฟเดฒเตเดฒ
  • เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดกเดพเดฑเตเดฑเดพ เด˜เดŸเดจ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดธเต†เตผเดตเตผ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต

เดธเต†เตผเดตเตผ

  • เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เด…เดจเตเดธเดฐเดฟเดšเตเดšเต เดŸเดฟเดธเดฟเดชเดฟ เดธเต†เตผเดตเดฑเดฟเดจเตเดฑเต† เดธเดฎเดพเดฐเด‚เดญเดตเตเด‚ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เด‡เดŸเดชเต†เดŸเดฒเตเด‚ เดจเดŸเดคเตเดคเตเดจเตเดจเต.
  • เด‡เดคเดฟเดจเต เด’เดฐเต เดชเต‹เตผเดŸเตเดŸเต เดจเดฎเตเดชเตผ, เดฌเดซเตผ เดตเดฒเตเดชเตเดชเด‚, เด˜เดŸเดจเดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดŽเดจเตเดจเดฟเดต เด…เดŸเด™เตเด™เตเดจเตเดจ เด’เดฐเต เดธเต†เตผเดตเต เดกเดพเดฑเตเดฑเดพ เด˜เดŸเดจเดฏเตเดฃเตเดŸเต เดคเดฐเด™เตเด™เตพ.เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เตพ
  • เดฑเตบ เดฐเต€เดคเดฟ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เด‡เดจเตเดฑเดฑเดพเด•เตเดทเตป เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต ( เดคเดจเตเดจเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดชเต‹เตผเดŸเตเดŸเดฟเตฝ เด‡เตปเด•เดฎเดฟเด‚เด—เต เด•เดฃเด•เตเดทเดจเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเดจเตเดจเต, เด’เดฐเต เดชเตเดคเดฟเดฏ เด•เดฃเด•เตเดทเตป เดฒเดญเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เด…เดคเดฟเดจเตเดฑเต† เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เต เด’เดฐเต เดชเตเดคเดฟเดฏ เดคเตเดฐเต†เดกเดฟเดฒเต† เดธเตเดตเด•เดพเดฐเตเดฏ เดนเดพเตปเดกเดฟเตฝ เดฐเต€เดคเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เดฎเดพเดฑเตเดฑเตเดจเตเดจเต)
  • ะ’ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเด• เด•เดฃเด•เตเดทเดจเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดกเดพเดฑเตเดฑ เด’เดฐเต เดฌเดซเดฑเดฟเดฒเต‡เด•เตเด•เต เดฑเต€เดกเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เด’เดฐเต เดธเตเดŸเตเดฐเดฟเด‚เด—เต เดชเตเดฐเดพเดคเดฟเดจเดฟเดงเตเดฏเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดชเดฐเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เด•เตˆเดฎเดพเดฑเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ. เดšเต‹เดฏเตเดธเต
  • เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ. เดšเต‹เดฏเตเดธเต เดฎเดŸเด™เตเด™เตเดจเตเดจเต เดซเดฒเด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด’เดฐเต เดชเดฟเดถเด•เดฟเดจเต เด•เดพเดฐเดฃเดฎเดพเด•เตเดจเตเดจเต. เดซเดฒเด‚ เดชเดฟเดจเตเดจเต€เดŸเต เดฎเดพเดฑเตเดฑเดฟ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ.เดตเตเดฏเดพเด–เตเดฏเดพเดจเด‚เด…เดคเต เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเดจเตเดจเต intrpr - เดคเดฐเด‚ เด’เดฌเตเดœเด•เตเดฑเตเดฑเต เดตเตเดฏเดพเด–เตเดฏเดพเดจ เดกเดพเดฑเตเดฑ, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดชเตเดชเต เดซเดฒเด‚ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเตฝ เด’เดฐเต เดชเดฟเดถเด•เต เด‰เดฃเตเดŸเดพเด•เตเด•เตเดจเตเดจเต
  • เดคเตเดŸเตผเดจเตเดจเต เดธเตเดตเดฟเดšเตเดšเต เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต intrpr.เด•เดฎเดพเตปเดกเตเด•เตพ[0] เด‡เดคเดฟเตฝ เด’เดจเตเดจเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต: เดซเดฒเด‚, inv, เดชเดฟเดถเด•เต เด•เต‚เดŸเดพเดคเต† เด’เดฐเต เดตเดฟเดญเดพเด—เดฎเตเดฃเตเดŸเต เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟ
  • เดตเดฟเดญเดพเด—เดคเตเดคเดฟเตฝ เดซเดฒเด‚ เดฎเต‚เดฒเตเดฏเดฎเดจเตเดธเดฐเดฟเดšเตเดšเต เดธเตเดตเดฟเดšเตเดšเต เด•เดฃเตเดŸเต†เดคเตเดคเตเดจเตเดจเต intrpr.เด•เดฎเดพเตปเดกเตเด•เตพ[1] เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต เดฌเดซเตผเดฒเต†เด™เตเดคเต ะธ เดชเดคเดฟเดชเตเดชเต (เด“เดฐเต‹ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเดฒเตเด‚ เด…เดจเตเดฌเดจเตเดง เดซเด‚เด—เตโ€Œเดทเดจเต† เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเต)

เดซเด™เตเดทเดจเตเด•เตพ GetVersion ะธ เดฌเดซเตผ เดฒเต†เด™เตเดคเต เดซเดฏเดฒเดฟเดฒเตเดฃเตเดŸเต srvlib.go เดธเต†เตผเดตเตผ เดชเดพเด•เตเด•เต‡เดœเต

GetVersion(conn net.Conn, version string)

เด‡เดคเต เด•เตบเดธเต‹เดณเดฟเดฒเต‡เด•เตเด•เต เดชเตเดฐเดฟเดจเตเดฑเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเดฟเตฝ เดชเดพเดธเดพเด•เตเด•เดฟเดฏ เดชเดคเดฟเดชเตเดชเต เด•เตเดฒเดฏเดจเตเดฑเดฟเดฒเต‡เด•เตเด•เต เด…เดฏเดฏเตเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต:

conn.Write([]byte("result:" + version))

.
เดซเด‚เด—เตเดทเตป

BufferLength(conn net.Conn, intrpr *protocol.InterpreteData)

เด’เดฐเต เดฌเตเดฒเต‹เด•เตเด•เต, เด‡เดŸเดชเดพเดŸเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฎเดฑเตเดฑเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดกเดพเดฑเตเดฑ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดฐเต€เดคเดฟเดฏเดฟเตฝ เดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต:

  • เด…เด‚เด—เต€เด•เดฐเดฟเด•เตเด•เต‡เดฃเตเดŸ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เดณเดฟเตฝ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏ เดกเดพเดฑเตเดฑเดฏเตเดŸเต† เดคเดฐเด‚ เด•เตบเดธเต‹เดณเดฟเดฒเต‡เด•เตเด•เต เดชเตเดฐเดฟเดจเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต:
    fmt.Println("DataType:", intrpr.Commands[2])
  • เดฎเต‚เดฒเตเดฏเด‚ เดตเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเต intrpr.เดถเดฐเต€เดฐเด‚ เด’เดฐเต เดธเด‚เด–เตเดฏเดพ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเดฟเดฒเต‡เด•เตเด•เต เดฌเดซเต_เดฒเต†เตป
  • เด’เดฐเต เดฌเดซเตผ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต เดจเตเดฏเต‚เดฌเดซเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดตเดฒเตเดชเตเดชเด‚:
    make([]byte, buf_len)
  • เดถเดฐเดฟ เดชเตเดฐเดคเดฟเด•เดฐเดฃเด‚ เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต:
    conn.Write([]byte("result:ok"))
  • เดฑเต€เดกเต เดธเตเดŸเตเดฐเต€เดฎเดฟเตฝ เดจเดฟเดจเตเดจเต เดฌเดซเตผ เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเตเด‚ เดชเต‚เดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต:
    io.ReadFull(conn, newbuf)

    .

  • เดฌเดซเดฑเดฟเดจเตเดฑเต† เด‰เดณเตเดณเดŸเด•เตเด•เด™เตเด™เตพ เด•เตบเดธเต‹เดณเดฟเดฒเต‡เด•เตเด•เต เดชเตเดฐเดฟเดจเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต
    fmt.Println(string(newbuf))

    เดตเดพเดฏเดฟเดšเตเดš เดฌเตˆเดฑเตเดฑเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเดตเตเด‚

    fmt.Println("Bytes length:", n)
  • เดถเดฐเดฟ เดชเตเดฐเดคเดฟเด•เดฐเดฃเด‚ เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต:
    conn.Write([]byte("result:ok"))

เดชเดพเด•เตเด•เต‡เดœเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดซเด‚เด—เตโ€Œเดทเดจเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเตเดตเต€เด•เดฐเดฟเดšเตเดš เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดธเต†เตผเดตเตผ เดชเดพเด•เตเด•เต‡เดœเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดฐเต€เดคเดฟเด•เตพ เด•เตเดฐเดฎเต€เด•เดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เต‹เตพ.

เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เต‹เตพ

เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดŽเด•เตเดธเตเดšเต‡เดžเตเดšเดฟเดฒเต† เดกเดพเดฑเตเดฑเดฏเต† เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เด‰เดชเดพเดงเดฟเดฏเดพเดฏเดฟ เด’เดฐเต เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต.

เดšเต‹เดฏเตเดธเต (เดธเตเดŸเตเดฐเดฟเด‚เด—เต) (เดธเตเดŸเตเดฐเดฟเด‚เด—เต, เดชเดฟเดถเด•เต) เดธเต†เตผเดตเดฑเดฟเดจเต เดฒเดญเดฟเดšเตเดš เดกเดพเดฑเตเดฑเดฏเตเดŸเต† เดชเตเดฐเดพเดฅเดฎเดฟเด• เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เต เดจเดŸเดคเตเดคเตเดจเตเดจเต, เดกเดพเดฑเตเดฑเดฏเตเดŸเต† เด’เดฐเต เดธเตเดŸเตเดฐเดฟเด‚เด—เต เดชเตเดฐเดพเดคเดฟเดจเดฟเดงเตเดฏเด‚ เด‡เตปเดชเตเดŸเตเดŸเดพเดฏเดฟ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด‡เดคเดฟเดจเดพเดฏเดฟ เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เดฟเดฏ เด’เดฐเต เดธเตเดŸเตเดฐเดฟเด‚เด—เต เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต เดตเตเดฏเดพเด–เตเดฏเดพเดคเดพเดตเต:

  • เด‡เตปเดชเตเดŸเตเดŸเต เดธเตเดŸเตเดฐเดฟเด‚เด—เต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดคเดฒเดฏเตเด‚ เดถเดฐเต€เดฐเดตเตเดฎเดพเดฏเดฟ เดตเดฟเดญเดœเดฟเด•เตเด•เตเดจเตเดจเต ReqParseN2(str)
  • เดคเดฒเดฏเต† เด˜เดŸเด•เด™เตเด™เดณเดพเดฏเดฟ เดตเดฟเดญเดœเดฟเด•เตเด•เตเด•เดฏเตเด‚ ReqParseHead(เดคเดฒ) เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด’เดฐเต เด•เดฎเดพเตปเดกเต เดธเตเดฒเตˆเดธเดฟเดฒเต‡เด•เตเด•เต เดธเตเดฅเดพเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต
  • ะ’ เดธเตเดตเดฟเดšเตเดšเต (เด•เดฎเดพเตปเดกเตเด•เตพ[0]) เดฒเดญเดฟเดšเตเดš เด•เดฎเดพเตปเดกเต เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด• (cmd, เด•เต€, เดตเดฟเดฒเดพเดธเด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดตเดฟเดญเดพเด—เด‚ เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเดฃเต เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟ)
  • cmd-เตฝ 2 เด•เดฎเดพเตปเดกเตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต เดธเตเดตเดฟเดšเตเดšเต (เด•เดฎเดพเตปเดกเตเด•เตพ[1]) - เดจเต€เดณเด‚ ะธ เดจเต‡เดŸเตฝ.
  • เดจเต€เดณเด‚ เดกเดพเดฑเตเดฑ เดคเดฐเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต เด•เดฎเดพเตปเดกเตเด•เตพ[2] เด…เดคเดฟเตฝ เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต เดกเดพเดฑเตเดฑเดพ เดŸเตˆเดชเตเดชเต
  • เด…เดคเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต เดถเดฐเต€เดฐเด‚ เด’เดฐเต เดธเตเดŸเตเดฐเดฟเด‚เด—เต เดฎเต‚เดฒเตเดฏเด‚ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต
    len(body) < 1
  • เดชเตเดฐเดคเดฟเด•เดฐเดฃ เดธเตเดŸเตเดฐเดฟเด‚เด—เต เดจเตฝเด•เตเดจเตเดจเต:
    "result:bufferlength:" + datatype + "/" + body
  • เดจเต‡เดŸเตฝ เด’เดฐเต เดธเตเดŸเตเดฐเดฟเด‚เด—เต เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเดจเตเดจเต
    return "result:version/auto"

เดตเตเดฏเดพเด–เตเดฏเดพเดคเดพเดตเต

InterpreteData เด˜เดŸเดจ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดฒเดญเดฟเดšเตเดš เดกเดพเดฑเตเดฑเดฏเตเดŸเต† เดฆเตเดตเดฟเดคเต€เดฏ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เต เดจเดŸเดคเตเดคเตเดจเตเดจเต เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เดฒเตโ€ เดธเตเดŸเตเดฐเดฟเด‚เด—เตเด•เดณเตเด‚ เด’เดฌเตเดœเด•เตเดฑเตเดฑเต เดฐเต‚เดชเต€เด•เดฐเดฃเดตเตเด‚ เดตเตเดฏเดพเด–เตเดฏเดพเดจ เดกเดพเดฑเตเดฑ.

type InterpreteData struct {
	Head string
	Commands []string
	Body string
	IsErr bool
	ErrCode int 
	ErrMessage string
}

เดซเด‚เด—เตเดทเตป

Interprete(str string) (*InterpreteData, error)

เด’เดฐเต เดธเตเดŸเตเดฐเดฟเด‚เด—เต เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต เดซเดฒเด‚ เด’เดฌเตโ€Œเดœเด•เตโ€Œเดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดฑเดซเดฑเตปเดธเต เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต เดตเตเดฏเดพเด–เตเดฏเดพเดจ เดกเดพเดฑเตเดฑ.

เดชเตเดฐเต‹เด—เดคเดฟ:

  • เด…เดคเตเดชเต‹เดฒเต† เดคเดจเตเดจเต† เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เดฒเตโ€ เดคเดฒเดฏเตเด‚ เดถเดฐเต€เดฐเดตเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดตเต‡เตผเดคเดฟเดฐเดฟเดšเตเดšเต†เดŸเตเด•เตเด•เตเดจเตเดจเต ReqParseN2(str)
  • เดคเดฒ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฎเต‚เดฒเด•เด™เตเด™เดณเดพเดฏเดฟ เดตเดฟเดญเดœเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต ReqParseHead(เดคเดฒ)
  • เด’เดฌเตเดœเด•เตเดฑเตเดฑเต เดธเดฎเดพเดฐเด‚เดญเดฟเดšเตเดšเต เดตเตเดฏเดพเด–เตเดฏเดพเดจ เดกเดพเดฑเตเดฑ เด…เดคเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเดจเตเดจเต:

res := &InterpreteData{
	Head: head,
	Commands: commands,
	Body: body,
}
return res, nil

เดˆ เดตเดธเตเดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต server.go เดชเตเดฐเดงเดพเดจ เดชเดพเด•เตเด•เต‡เดœเต.

เด•เตเดฒเดฏเดจเตเดฑเต

เด•เตเดฒเดฏเดจเตเดฑเต เดชเดพเด•เตเด•เต‡เดœเดฟเตฝ เดซเด‚เด—เตเดทเดจเตเด•เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต TCPConnect ะธ TCPResponseData.

เดซเด‚เด—เตเดทเตป

TCPConnect(s *types.Settings, data []byte, payload []byte)

เด‡เดคเตเดชเต‹เดฒเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต:

  • เดชเดพเดธเตเดธเดพเดฏ เด•เตเดฐเดฎเต€เด•เดฐเดฃ เด’เดฌเตเดœเด•เตเดฑเตเดฑเดฟเตฝ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏ เด•เดฃเด•เตเดทเดจเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เด•เดฃเด•เตเดทเตป เด‰เดฃเตเดŸเดพเด•เตเด•เดฟ
    net.Dial("tcp", s.Host + ":" + s.Port)
  • เดกเดพเดฑเตเดฑ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเดฟเตฝ เด•เตˆเดฎเดพเดฑเดฟเดฏ เดกเดพเดฑเตเดฑ เด•เตˆเดฎเดพเดฑเตเดฑเด‚ เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเต:
    conn.Write(data)
  • เด‰เดคเตเดคเดฐเด‚ เดตเดพเดฏเดฟเดšเตเดšเต
    resp, n, _ := TCPResponseData(conn, s.BufSize)

    เด•เตบเดธเต‹เดณเดฟเตฝ เดชเตเดฐเดฟเดจเตเดฑเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต

    fmt.Println(string(resp[:n]))
  • เด•เตˆเดฎเดพเดฑเตเดฑเด‚ เดšเต†เดฏเตเดคเดพเตฝ เดชเต‡เดฒเต‹เดกเต เดชเดฟเดจเตเดจเต€เดŸเต เด…เดคเต เด•เตˆเดฎเดพเดฑเตเดจเตเดจเต
    conn.Write(payload)

    เด•เต‚เดŸเดพเดคเต† เดธเต†เตผเดตเตผ เดชเตเดฐเดคเดฟเด•เดฐเดฃเด‚ เดตเดพเดฏเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดคเต เด•เตบเดธเต‹เดณเดฟเดฒเต‡เด•เตเด•เต เดชเตเดฐเดฟเดจเตเดฑเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต

เดซเด‚เด—เตเดทเตป

 TCPResponseData(conn net.Conn, bufsiz int) ([]byte, int, error)

เดจเดฟเตผเดฆเตเดฆเดฟเดทเตโ€ŒเดŸ เดตเดฒเตเดชเตเดชเดคเตเดคเดฟเดฒเตเดณเตเดณ เด’เดฐเต เดฌเดซเตผ เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดตเดฟเดŸเต† เดธเต†เตผเดตเตผ เดชเตเดฐเดคเดฟเด•เดฐเดฃเด‚ เดตเดพเดฏเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดˆ เดฌเดซเดฑเตเด‚ เดตเดพเดฏเดฟเดšเตเดš เดฌเตˆเดฑเตเดฑเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเดตเตเด‚ เด’เดฐเต เดชเดฟเดถเด•เต เด’เดฌเตโ€Œเดœเด•เตโ€Œเดฑเตเดฑเตเด‚ เดจเตฝเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เด•เตเดฒเดฏเดจเตเดฑเต เดธเดฌเตเดฑเต‚เดŸเตเดŸเต€เตป

เดจเต‹เดกเต เดธเต†เตผเดตเดฑเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เด•เดฎเดพเตปเดกเตเด•เตพ เด…เดฏเดฏเตโ€Œเด•เตเด•เดพเดจเตเด‚ เดนเตเดฐเดธเตเดตเดฎเดพเดฏ เดธเตเดฅเดฟเดคเดฟเดตเดฟเดตเดฐเด•เตเด•เดฃเด•เตเด•เตเด•เดณเตเด‚ เดชเดฐเดฟเดถเต‹เดงเดจเด•เดณเตเด‚ เดจเต‡เดŸเดพเดจเตเด‚ เดธเดนเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเต.

เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚: JSON เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเดฒเตเดณเตเดณ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเตฝ, เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดธเตโ€ŒเดŸเตเดฐเดฟเด‚เด—เต เด†เดฏเดฟ เด…เดฏเดฏเตโ€Œเด•เตเด•เต‡เดฃเตเดŸ เดกเดพเดฑเตเดฑ, เดชเต‡เดฒเต‹เดกเดฟเดฒเต‡เด•เตเด•เต เด…เดฏเดฏเตโ€Œเด•เตเด•เต‡เดฃเตเดŸ เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดชเดพเดค, เดจเต‹เดกเต เดทเต†เดกเตเดฏเต‚เดณเตผ เดŽเดฎเตเดฒเต‡เดทเตป เดซเตเดฒเดพเด—เต, เด’เดฐเต เดธเด‚เด–เตเดฏเดพ เดฎเต‚เดฒเตเดฏเดฎเดพเดฏเดฟ เด•เตˆเดฎเดพเดฑเตเดจเตเดจ เดกเดพเดฑเตเดฑเดฏเตเดŸเต† เดคเดฐเด‚.

  • เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเต
    st := types.ParseConfig(*config)
  • เดŽเดฎเต เดชเดคเดพเด• เดชเดพเดธเดพเด•เตเด•เดฟเดฏเดพเตฝ, เด…เดคเต เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต เดทเต†เดกเตเดฏเต‚เดณเตผ
  • เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดชเดพเดค เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจ เดŽเดซเต เดซเตเดฒเดพเด—เต เดจเตฝเด•เดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดžเด™เตเด™เตพ เด…เดคเดฟเดจเตเดฑเต† เดกเดพเดฑเตเดฑ เดฒเต‹เดกเตเดšเต†เดฏเตเดฏเตเดจเตเดจเต fdb เด‰เดณเตเดณเดŸเด•เตเด•เด‚ เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เด…เดฏเดฏเตเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต
    client.TCPConnect(st, []byte(CMD_BUFFER_LENGTH + ":" + strconv.Itoa(*t) + "/" + strconv.Itoa(fdblen)), fdb)
  • เดซเดฏเตฝ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏเดฟเดŸเตเดŸเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดซเตเดฒเดพเด—เดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดกเดพเดฑเตเดฑ เดฒเดณเดฟเดคเดฎเดพเดฏเดฟ เด…เดฏเดฏเตโ€Œเด•เตเด•เตเด‚ -d:
    client.TCPConnect(st, []byte(*data), nil)

เด‡เดคเต†เดฒเตเดฒเดพเด‚ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เดณเดฟเดจเตเดฑเต† เด˜เดŸเดจ เด•เดพเดฃเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดชเตเดฐเดพเดคเดฟเดจเดฟเดงเตเดฏเดฎเดพเดฃเต. เดตเดฟเด•เดธเดจ เดธเดฎเดฏเดคเตเดคเต, เด†เดตเดถเตเดฏเดฎเดพเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เด…เดคเดฟเดจเตเดฑเต† เด˜เดŸเดจเดฏเดฟเตฝ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต.

เดฐเดฃเตเดŸเดพเด‚ เดญเดพเด—เดคเตเดคเต เดžเดพเตป เดฌเตเดฒเต‹เด•เตเด•เตเด•เตพเด•เตเด•เตเด‚ เด‡เดŸเดชเดพเดŸเตเด•เตพเด•เตเด•เตเดฎเตเดณเตเดณ เดกเดพเดฑเตเดฑเดพ เด˜เดŸเดจเด•เดณเต† เด•เตเดฑเดฟเดšเตเดšเต เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเด‚, 3-เตฝ JavaScript-เตฝ เดจเดฟเดจเตเดจเต เด•เดฃเด•เตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดตเต†เดฌเตโ€Œเดธเต‹เด•เตเด•เดฑเตเดฑเต เดธเต†เตผเดตเดฑเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต, 4-เตฝ เดžเดพเตป เดธเดฟเตปเด•เตเดฐเตŠเดฃเตˆเดธเต‡เดทเตป เดทเต†เดกเตเดฏเต‚เดณเดฑเดฟเดฒเต‡เด•เตเด•เต เดจเต‹เด•เตเด•เตเด‚, เดคเตเดŸเตผเดจเตเดจเต เด‡เตปเดชเตเดŸเตเดŸเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเตเด‚ เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเตเด‚ เดฌเตˆเดฑเตเดฑเตเด•เต‹เดกเต เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจ เด’เดฐเต เดธเตเดฑเตเดฑเดพเด•เตเด•เต เดฎเต†เดทเต€เตป, เด•เตเดฐเดฟเดชเตเดฑเตเดฑเต‹เด—เตเดฐเดซเดฟ, เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเตเด•เตพเด•เตเด•เตเดณเตเดณ เดชเต‚เดณเตเด•เตพ.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•