เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบเบฒเบ™เบญเบญเบเปเบšเบš Go เปเบกเปˆเบ™เบšเปเปˆเบ”เบตเบชเปเบฒเบฅเบฑเบšเบ™เบฑเบเบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ—เบตเปˆเบชเบฐเบซเบผเบฒเบ”

เปƒเบ™เป€เบ”เบทเบญเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบ‚เป‰เบญเบเป„เบ”เป‰เปƒเบŠเป‰ Go เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เบซเบผเบฑเบเบ–เบฒเบ™เบชเบฐเปเบ”เบ‡เปเบ™เบงเบ„เบดเบ” (เบ›เบฐเบกเบฒเบ™: code เป€เบžเบทเปˆเบญเบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ„เบงเบฒเบกเบ„เบดเบ”) เปƒเบ™เป€เบงเบฅเบฒเบซเบงเปˆเบฒเบ‡เบ‚เบญเบ‡เบฅเบฒเบง, เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบชเบถเบเบชเบฒเบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบกเป€เบญเบ‡. เป‚เบ›เบฅเปเบเบฅเบกเบ•เบปเบงเป€เบญเบ‡เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบซเบผเบฒเบเปเบฅเบฐเบšเปเปˆเปเบกเปˆเบ™เบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰, เปเบ•เปˆเบ›เบฐเบชเบปเบšเบเบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰ Go เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เบชเบปเบกเบ„เบงเบ™เป„เบ”เป‰เบฎเบฑเบšเบชเบญเบ‡เบชเบฒเบกเบ„เปเบฒเบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™. เป„เบ›โ€‹เบชเบฑเบ™โ€‹เบเบฒโ€‹เบงเปˆเบฒโ€‹เบˆเบฐ (เบ›เบฐเบกเบฒเบ™: เบšเบปเบ”เบ„เบงเบฒเบกเบ—เบตเปˆเบ‚เบฝเบ™เปƒเบ™เบ›เบต 2015) เป€เบ›เบฑเบ™เบžเบฒเบชเบฒเบ—เบตเปˆเบ™เบดเบเบปเบกเบชเบณเบฅเบฑเบšเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ›เบฑเบšเบ‚เบฐเปœเบฒเบ”เป„เบ”เป‰. เบžเบฒเบชเบฒเป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เป‚เบ”เบ Google, เบšเปˆเบญเบ™เบ—เบตเปˆเบกเบฑเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบขเปˆเบฒเบ‡เบซเป‰เบฒเบงเบซเบฑเบ™. เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบฅเบธเปˆเบก, เบ‚เป‰เบญเบเบ„เบดเบ”เบขเปˆเบฒเบ‡เบŠเบทเปˆเบชเบฑเบ”เบงเปˆเบฒเบเบฒเบ™เบญเบญเบเปเบšเบšเบ‚เบญเบ‡เบžเบฒเบชเบฒ Go เปเบกเปˆเบ™เบšเปเปˆเบ”เบตเบชเปเบฒเบฅเบฑเบšเบ™เบฑเบเบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ—เบตเปˆเบชเบฐเบซเบผเบฒเบ”.

เบญเบญเบเปเบšเบšเบชเปเบฒเบฅเบฑเบšเบ™เบฑเบเบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ—เบตเปˆเบญเปˆเบญเบ™เปเบญ?

Go เปเบกเปˆเบ™โ€‹เบ‡เปˆเบฒเบโ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบฎเบฝเบ™โ€‹เบฎเบนเป‰โ€‹, เบชเบฐโ€‹เบ™เบฑเป‰เบ™โ€‹เบ‡เปˆเบฒเบโ€‹เบ—เบตเปˆโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เบชเบฐโ€‹เป€เบซเบ™เบตโ€‹เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เปƒเบ™โ€‹เบ•เบญเบ™โ€‹เปเบฅเบ‡โ€‹เบซเบ™เบถเปˆเบ‡โ€‹, เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบฅเบฐโ€‹เบซเบฑเบ”โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹เบ•เบฐโ€‹เบžเบฑเบ™โ€‹. เบ›เบถเป‰เบกเบ—เบตเปˆเบ‚เป‰เบญเบเป€เบ„เบตเบเบฎเบฝเบ™ Go เปเบกเปˆเบ™เป€เบญเบตเป‰เบ™เบงเปˆเบฒ เบเบฒเบ™เปเบ™เบฐเบ™เปเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบกเปƒเบ™ Go (translation), เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰เบญเบญเบ™เป„เบฅเบ™เปŒ. เบ›เบถเป‰เบก, เบ„เบทเบเบฑเบšเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡ Go เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡, เปเบกเปˆเบ™เบญเปˆเบฒเบ™เบ‡เปˆเบฒเบ, เบกเบตเบ•เบปเบงเบขเปˆเบฒเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบ”เบต, เปเบฅเบฐเบกเบตเบ›เบฐเบกเบฒเบ™ 150 เปœเป‰เบฒเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป„เบ”เป‰เปƒเบ™เบ„เบฑเป‰เบ‡เบ”เบฝเบง. เบ„เบงเบฒเบกเบ‡เปˆเบฒเบเบ”เบฒเบเบ™เบตเป‰เปเบกเปˆเบ™เบชเบปเบ”เบŠเบทเปˆเบ™เปƒเบ™เบ•เบญเบ™เบ—เปเบฒเบญเบดเบ”, เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเปƒเบ™เป‚เบฅเบเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบกเบ—เบตเปˆเป€เบ•เบฑเบกเป„เบ›เบ”เป‰เบงเบเป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบ. เปเบ•เปˆโ€‹เปƒเบ™โ€‹เบ—เบตเปˆโ€‹เบชเบธเบ”, เบšเปเปˆโ€‹เบ”เบปเบ™โ€‹เบซเบผเบทโ€‹เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹เบ„เบงเบฒเบกโ€‹เบ„เบดเบ”โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป€เบเบตเบ”โ€‹เบ‚เบถเป‰เบ™โ€‹: "เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เปเบ—เป‰โ€‹?

Google เบญเป‰เบฒเบ‡เบงเปˆเบฒเบ„เบงเบฒเบกเบ‡เปˆเบฒเบเบ”เบฒเบเบ‚เบญเบ‡ Go เปเบกเปˆเบ™เบˆเบธเบ”เบ‚เบฒเบเบ‚เบญเบ‡เบกเบฑเบ™เปเบฅเบฐเบžเบฒเบชเบฒเบ—เบตเปˆเบ–เบทเบเบญเบญเบเปเบšเบšเบกเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบœเบฐเบฅเบดเบ”เบชเบนเบ‡เบชเบธเบ”เปƒเบ™เบ—เบตเบกเบ‡เบฒเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ, เปเบ•เปˆเบ‚เป‰เบญเบเบชเบปเบ‡เปƒเบชเบกเบฑเบ™. เบกเบตเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเบ‚เบฒเบ”เบซเบฒเบเป„เบ› เบซเบผเบทเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›. เปเบฅเบฐเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบเป‰เบญเบ™เบเบฒเบ™เบ‚เบฒเบ”เบ„เบงเบฒเบกเป„เบงเป‰เบงเบฒเบ‡เปƒเบˆเปƒเบ™เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ, เบ”เป‰เบงเบเบเบฒเบ™เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบซเบเบฑเบ‡เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡. เบ„เบงเบฒเบกเบ›เบฒเบ–เบฐเบซเบ™เบฒเบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเบ‡เปˆเบฒเบเบ”เบฒเบเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ—เบตเปˆเบกเบตเบชเบฐเบ•เบดเป‚เบ”เบเบœเบนเป‰เบญเบญเบเปเบšเบšเบžเบฒเบชเบฒ, เปเบฅเบฐเป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆเบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เป€เบ‚เบปเป‰เบฒเปƒเบˆเปเบฎเบ‡เบˆเบนเบ‡เปƒเบˆเบ‚เบญเบ‡เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบžเบฐเบเบฒเบเบฒเบกเบšเบฑเบ™เบฅเบธเปƒเบ™ Go.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบกเบฑเบ™เบˆเบถเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบ‡เปˆเบฒเบเบ”เบฒเบ? เบ™เบตเป‰เปเบกเปˆเบ™ เบ„เบณ เป€เบงเบปเป‰เบฒเบชเบญเบ‡เบชเบฒเบกเบขเปˆเบฒเบ‡ Rob Pike (เบ›เบฐเบกเบฒเบ™: เบซเบ™เบถเปˆเบ‡เปƒเบ™เบœเบนเป‰เบฎเปˆเบงเบกเบชเป‰เบฒเบ‡เบžเบฒเบชเบฒ Go):

เบˆเบธเบ”เบชเปเบฒเบ„เบฑเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบงเปˆเบฒเบœเบนเป‰เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ (เบ›เบฐเบกเบฒเบ™: Googlers) เบšเปเปˆเปเบกเปˆเบ™เบ™เบฑเบเบ„เบปเป‰เบ™เบ„เบงเป‰เบฒ. เบ•เบฒเบกเบเบปเบ”เบฅเบฐเบšเบฝเบš, เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปเบกเปˆเบ™เป„เบงเบซเบ™เบธเปˆเบก, เบกเบฒเบซเบฒเบžเบงเบเป€เบฎเบปเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบฎเบฝเบ™, เบšเบฒเบ‡เบ—เบตเบžเบงเบเป€เบ‚เบปเบฒเป„เบ”เป‰เบชเบถเบเบชเบฒ Java, เบซเบผเบท C / C ++, เบซเบผเบท Python. เบžเบงเบเป€เบ‚เบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเปƒเบˆเบžเบฒเบชเบฒเบ—เบตเปˆเบเบดเปˆเบ‡เปƒเบซเบเปˆ, เปเบ•เปˆเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบซเป‰เบžเบงเบเป€เบ‚เบปเบฒเบชเป‰เบฒเบ‡เบŠเบญเบšเปเบงเบ—เบตเปˆเบ”เบต. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบงเปˆเบฒเบžเบฒเบชเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบ„เบงเบ™เบˆเบฐเบ‡เปˆเบฒเบเบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒเบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเปเบฅเบฐเบฎเบฝเบ™เบฎเบนเป‰.
 
เบฅเบฒเบงเบ„เบงเบ™เบˆเบฐเบ„เบธเป‰เบ™เป€เบ„เบตเบ, เป€เบงเบปเป‰เบฒเบ›เบฐเบกเบฒเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš C. เบœเบนเป‰เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆ Google เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบญเบฒเบŠเบตเบšเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เปเบฅเบฐเบชเปˆเบงเบ™เบซเบผเบฒเบเปเบกเปˆเบ™เบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบšเบžเบฒเบชเบฒเบ‚เบฑเป‰เบ™เบ•เบญเบ™, เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเบ„เบญเบšเบ„เบปเบง C. เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบœเบฐเบฅเบดเบ”เป„เบงเปƒเบ™เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเปƒเบซเบกเปˆเบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบžเบฒเบชเบฒเบšเปเปˆเบ„เบงเบ™เป€เบ›เบฑเบ™เบฎเบฒเบเป€เบเบตเบ™เป„เบ›.

เปเบกเปˆเบ™โ€‹เบซเบเบฑเบ‡? เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ Rob Pike เป€เบงเบปเป‰เบฒเป‚เบ”เบเบžเบทเป‰เบ™เบ–เบฒเบ™เปเบฅเป‰เบงเบงเปˆเบฒเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบขเบนเปˆ Google เบšเปเปˆเบ”เบต, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบชเป‰เบฒเบ‡เบžเบฒเบชเบฒเบชเปเบฒเบฅเบฑเบšเบ„เบปเบ™เป‚เบ‡เปˆ (เบ›เบฐเบกเบฒเบ™: dumbed เบฅเบปเบ‡ ) เป€เบžเบทเปˆเบญ เบงเปˆเบฒ เบžเบงเบ เป€เบ‚เบปเบฒ เป€เบˆเบปเป‰เบฒ เบกเบต เบ„เบงเบฒเบก เบชเบฒ เบกเบฒเบ” เบ—เบตเปˆ เบˆเบฐ เป€เบฎเบฑเบ” เบšเบฒเบ‡ เบชเบดเปˆเบ‡ เบšเบฒเบ‡ เบขเปˆเบฒเบ‡ . เบ›เบฐเป€เบžเบ”เปƒเบ”เบ—เบตเปˆเบซเบเบดเปˆเบ‡เป€เบšเบดเปˆเบ‡เป€เบžเบทเปˆเบญเบ™เบฎเปˆเบงเบกเบ‡เบฒเบ™เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡? เบ‚เป‰เบญเบเป€เบŠเบทเปˆเบญเบชเบฐเป€เปเบตเบงเปˆเบฒเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบญเบ‡ Google เบ–เบทเบเป€เบฅเบทเบญเบเบ”เป‰เบงเบเบกเบทเบˆเบฒเบเบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡ เปเบฅเบฐเบ”เบตเบ—เบตเปˆเบชเบธเบ”เปƒเบ™เป‚เบฅเบ. เปเบ™เปˆเบ™เบญเบ™เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบเบฒเบเบเบงเปˆเบฒ?

เบ›เบญเบกเบ‚เบญเบ‡เบ„เบงเบฒเบกเบ‡เปˆเบฒเบเบ”เบฒเบเบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›

เบเบฒเบ™เป€เบฎเบฑเบ”เปเบšเบšเบ‡เปˆเบฒเบเป†เปเบกเปˆเบ™เป€เบ›เบฑเบ™เป€เบ›เบปเป‰เบฒเปเบฒเบเบ—เบตเปˆเบชเบปเบกเบ„เบงเบ™เปƒเบ™เบเบฒเบ™เบญเบญเบเปเบšเบšเปƒเบ”เบ™เบถเปˆเบ‡, เปเบฅเบฐเบเบฒเบ™เบžเบฐเบเบฒเบเบฒเบกเบชเป‰เบฒเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเปเบกเปˆเบ™เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบเบฒเบ. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เป€เบกเบทเปˆเบญเบžเบฐเบเบฒเบเบฒเบกเปเบเป‰เป„เบ‚ (เบซเบผเบทเปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡เบชเบฐเปเบ”เบ‡เบญเบญเบ) เบšเบฑเบ™เบซเบฒเบชเบฐเบฅเบฑเบšเบชเบฑเบšเบŠเป‰เบญเบ™, เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบชเบฐเบฅเบฑเบšเบชเบฑเบšเบŠเป‰เบญเบ™เปเบกเปˆเบ™เบˆเปเบฒเป€เบ›เบฑเบ™. เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เปเบฅเบฐเบ„เบงเบฒเบกเบŠเบฑเบšเบŠเป‰เบญเบ™เบšเปเปˆเปเบกเปˆเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบ‚เบญเบ‡เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก, เปเบ•เปˆเบกเบตเบžเบทเป‰เบ™เบ–เบฒเบ™เบเบฒเบ‡เบ—เบตเปˆเบžเบฒเบชเบฒเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡ abstractions elegant เบ—เบตเปˆเบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰.

เบšเปเปˆเบชเบฐเปเบ”เบ‡เบญเบญเบเบซเบผเบฒเบ

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ„เบงเบฒเบกเบกเบธเปˆเบ‡เปเบฑเป‰เบ™เบ•เปเปˆเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ, Go เบ‚เบฒเบ”เบชเบดเปˆเบ‡เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบตเปˆเบ–เบทเบเบฎเบฑเบšเบฎเบนเป‰เบงเปˆเบฒเป€เบ›เบฑเบ™เบ—เปเบฒเบกเบฐเบŠเบฒเบ”เปƒเบ™เบžเบฒเบชเบฒเบญเบทเปˆเบ™. เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบ”เบตเปƒเบ™เบ•เบญเบ™เบ—เปเบฒเบญเบดเบ”, เปเบ•เปˆเปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบกเบฑเบ™เบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰เบฅเบฐเบซเบฑเบ” verbose. เป€เบซเบ”เบœเบปเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰เบ„เบงเบ™เบˆเบฐเป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™ - เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ‡เปˆเบฒเบเบชเปเบฒเบฅเบฑเบšเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ—เบตเปˆเบˆเบฐเบญเปˆเบฒเบ™เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบ„เบปเบ™เบญเบทเปˆเบ™, เปเบ•เปˆเปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เบ„เบงเบฒเบกเบ‡เปˆเบฒเบเบ”เบฒเบเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป€เบ›เบฑเบ™เบญเบฑเบ™เบ•เบฐเบฅเบฒเบเบ•เปเปˆเบเบฒเบ™เบญเปˆเบฒเบ™. เบšเปเปˆเบกเบตเบ•เบปเบงเบซเบเปเป‰เปƒเบ™ Go: เบšเปเปˆเบงเปˆเบฒเบˆเบฐเบซเบผเบฒเบเบซเบผเบทเบšเปเปˆเบกเบตเบซเบเบฑเบ‡.

เบ•เบปเบงเบขเปˆเบฒเบ‡, console utility เบ—เบตเปˆเบญเปˆเบฒเบ™ stdin เบซเบผเบทเป„เบŸเบฅเปŒเบˆเบฒเบเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบˆเบฐเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ™เบตเป‰:

package main

import (
    "bufio"
    "flag"
    "fmt"
    "log"
    "os"
)

func main() {

    flag.Parse()
    flags := flag.Args()

    var text string
    var scanner *bufio.Scanner
    var err error

    if len(flags) > 0 {

        file, err := os.Open(flags[0])

        if err != nil {
            log.Fatal(err)
        }

        scanner = bufio.NewScanner(file)

    } else {
        scanner = bufio.NewScanner(os.Stdin)
    }

    for scanner.Scan() {
        text += scanner.Text()
    }

    err = scanner.Err()
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(text)
}

เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบฅเบฐเบซเบฑเบ”เบ™เบตเป‰เบเบฑเบ‡เบžเบฐเบเบฒเบเบฒเบกเบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบ—เบปเปˆเบงเป„เบ›เป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰ verbosity เบ‚เบญเบ‡ Go เป„เบ”เป‰เบฎเบฑเบšเปƒเบ™เบงเบดเบ—เบตเบเบฒเบ™, เปเบฅเบฐเป€เบ›เบฑเบ™เบœเบปเบ™, เบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ‡เปˆเบฒเบเบ”เบฒเบเป€เบฎเบฑเบ”เปƒเบซเป‰เบˆเปเบฒเบ™เบงเบ™เบฅเบฐเบซเบฑเบ”เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ.

เบ—เบตเปˆเบ™เบตเป‰, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เปเบกเปˆเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ”เบฝเบงเบเบฑเบ™เปƒเบ™ D:

import std.stdio, std.array, std.conv;

void main(string[] args)
{
    try
    {
        auto source = args.length > 1 ? File(args[1], "r") : stdin;
        auto text   = source.byLine.join.to!(string);

        writeln(text);
    }
    catch (Exception ex)
    {
        writeln(ex.msg);
    }
}

เปเบฅเบฐเปƒเบœเบญเปˆเบฒเบ™เป„เบ”เป‰เบซเบผเบฒเบเบเบงเปˆเบฒเบ™เบตเป‰? เบ‚เป‰เบญเบเบˆเบฐเปƒเบซเป‰เบ„เบฐเปเบ™เบ™เบชเบฝเบ‡เบ‚เบญเบ‡เบ‚เป‰เบญเบเปƒเบซเป‰ D. เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบฅเบฒเบงเปเบกเปˆเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป„เบ”เป‰เบซเบผเบฒเบ เป€เบžเบฒเบฐเบงเปˆเบฒเบฅเบฒเบงเบญเบฐเบ—เบดเบšเบฒเบเบเบฒเบ™เบเบฐเบ—เบณเป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™เบเบงเปˆเบฒ. D เปƒเบŠเป‰เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบ (เบ›เบฐเบกเบฒเบ™: เป‚เบ—เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบ ะธ เบฎเบนเบšเปเบšเบš) เบเปˆเบงเบฒเปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡ Go, เปเบ•เปˆเบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบชเบฑเบšเบชเบปเบ™เปเบ—เป‰เป†เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเบžเบงเบเบกเบฑเบ™.

Hell เบ‚เบญเบ‡เบชเปเบฒเป€เบ™เบปเบฒ

เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ—เบตเปˆเบ™เบดเบเบปเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡ Go เปเบกเปˆเบ™เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›. เบ™เบตเป‰เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบˆเบฐเบŠเปˆเบงเบเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบ„เบฑเบ”เบฅเบญเบเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ—เบธเบเบ›เบฐเป€เบžเบ”เบ‚เปเป‰เบกเบนเบ™. เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เบซเบ™เป‰เบฒเบ—เบตเปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบฐเบซเบผเบธเบšเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบกเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เปƒเบ™เบ—เบฒเบ‡เบญเบทเปˆเบ™เบ™เบญเบเป€เบซเบ™เบทเบญเบˆเบฒเบเบเบฒเบ™เบ„เบฑเบ”เบฅเบญเบ - เบงเบฒเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบกเบฑเบ™เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ›เบฐเป€เบžเบ”เบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบก; เบšเปเปˆเบกเบตเบงเบดเบ—เบตเบญเบทเปˆเบ™:

package main

import "fmt"

func int64Sum(list []int64) (uint64) {
    var result int64 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func int32Sum(list []int32) (uint64) {
    var result int32 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func int16Sum(list []int16) (uint64) {
    var result int16 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func int8Sum(list []int8) (uint64) {
    var result int8 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func main() {

    list8  := []int8 {1, 2, 3, 4, 5}
    list16 := []int16{1, 2, 3, 4, 5}
    list32 := []int32{1, 2, 3, 4, 5}
    list64 := []int64{1, 2, 3, 4, 5}

    fmt.Println(int8Sum(list8))
    fmt.Println(int16Sum(list16))
    fmt.Println(int32Sum(list32))
    fmt.Println(int64Sum(list64))
}

เปเบฅเบฐเบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบตเป‰เบเบฑเบ‡เปƒเบŠเป‰เบšเปเปˆเป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเบ›เบฐเป€เบžเบ”เบ—เบตเปˆเป€เบŠเบฑเบ™. เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบฅเบฐเป€เบกเบตเบ”เบซเบผเบฑเบเบเบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบšเปเปˆเป€เบฎเบฑเบ”เบŠเป‰เปเบฒเบ•เบปเบงเบ—เปˆเบฒเบ™เป€เบญเบ‡ (เปเบซเป‰เบ‡), เบซเบ™เบถเปˆเบ‡เปƒเบ™เบซเบผเบฑเบเบเบฒเบ™เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบชเบฝเบ‡เปเบฅเบฐเบŠเบฑเบ”เป€เบˆเบ™เบ—เบตเปˆเบชเบธเบ”, เบเบฒเบ™เบšเปเปˆเบชเบปเบ™เปƒเบˆเบ—เบตเปˆเป€เบ›เบฑเบ™เปเบซเบผเปˆเบ‡เบ‚เบญเบ‡เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบซเบผเบฒเบ. เป€เบ›เบฑเบ™เบซเบเบฑเบ‡ Go เบˆเบถเปˆเบ‡เป€เบฎเบฑเบ”เบญเบฑเบ™เบ™เบตเป‰? เบ™เบตเป‰เปเบกเปˆเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบ‚เบตเป‰เบฎเป‰เบฒเบเบ‚เบญเบ‡เบžเบฒเบชเบฒ.

เบ•เบปเบงเบขเปˆเบฒเบ‡เบ”เบฝเบงเบเบฑเบ™เบเปˆเบฝเบงเบเบฑเบš D:

import std.stdio;
import std.algorithm;

void main(string[] args)
{
    [1, 2, 3, 4, 5].reduce!((a, b) => a + b).writeln;
}

เบ‡เปˆเบฒเบเบ”เบฒเบ, elegant เปเบฅเบฐเบเบปเบ‡เป„เบ›เบเบปเบ‡เบกเบฒ. เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเปƒเบŠเป‰เบขเบนเปˆเบ™เบตเป‰เปเบกเปˆเบ™ reduce เบชเปเบฒเบฅเบฑเบšเบ›เบฐเป€เบžเบ”เปเบกเปˆเปเบšเบšเปเบฅเบฐ predicate. เปเบกเปˆเบ™เปเบฅเป‰เบง, เบ™เบตเป‰เปเบกเปˆเบ™เบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบเบเปˆเบงเบฒเบฅเบธเป‰เบ™ Go, เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™เป€เบฅเบทเปˆเบญเบ‡เบเบฒเบเบชเปเบฒเบฅเบฑเบšเบ™เบฑเบเบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐเบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆ. เบ•เบปเบงเบขเปˆเบฒเบ‡เปƒเบ”เบ—เบตเปˆเบ‡เปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เบฎเบฑเบเบชเบฒเปเบฅเบฐเบญเปˆเบฒเบ™เบ‡เปˆเบฒเบเบเบงเปˆเบฒ?

เบ›เบฐเป€เบžเบ”เบ‡เปˆเบฒเบเบ”เบฒเบ bypass เบฅเบฐเบšเบปเบš

เบ‚เป‰เบญเบเบ™เบถเบเบžเบฒเบšเบงเปˆเบฒเบ™เบฑเบเบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Go เบ—เบตเปˆเบญเปˆเบฒเบ™เป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เบˆเบฐเบญเบญเบเบ›เบฒเบ เปเบฅเบฐเบฎเป‰เบญเบ‡เบญเบญเบเบกเบฒเบงเปˆเบฒ "เป€เบˆเบปเป‰เบฒเป€เบฎเบฑเบ”เบœเบดเบ”!" เบ”เบต, เบกเบตเบงเบดเบ—เบตเบญเบทเปˆเบ™เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบปเปˆเบงเป„เบ›เปเบฅเบฐเบ›เบฐเป€เบžเบ”, เปเบ•เปˆเบกเบฑเบ™เบ—เปเบฒเบฅเบฒเบเบฅเบฐเบšเบปเบšเบ›เบฐเป€เบžเบ”เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™!

เบฅเบญเบ‡เป€เบšเบดเปˆเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เปเบเป‰เป„เบ‚เบžเบฒเบชเบฒเบ—เบตเปˆเป‚เบ‡เปˆเป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒ:

package main

import "fmt"
import "reflect"

func Reduce(in interface{}, memo interface{}, fn func(interface{}, interface{}) interface{}) interface{} {
    val := reflect.ValueOf(in)

    for i := 0; i < val.Len(); i++ {
        memo = fn(val.Index(i).Interface(), memo)
    }

    return memo
}

func main() {

    list := []int{1, 2, 3, 4, 5}

    result := Reduce(list, 0, func(val interface{}, memo interface{}) interface{} {
        return memo.(int) + val.(int)
    })

    fmt.Println(result)
}

เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบ™เบตเป‰ Reduce เป„เบ”เป‰เบขเบทเบกเบˆเบฒเบเบšเบปเบ”เบ„เบงเบฒเบก เบ„เปเบฒเบชเบฑเบšเบ—เบปเปˆเบงเป„เบ›เปƒเบ™ Go (เบ›เบฐเบกเบฒเบ™: เบ‚เป‰เบญเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบ„เปเบฒเปเบ›เป„เบ”เป‰, เบ‚เป‰เบญเบเบˆเบฐเบ”เบตเปƒเบˆเบ–เป‰เบฒเป€เบˆเบปเป‰เบฒเบŠเปˆเบงเบเปƒเบ™เป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰). เบ”เบต, เบ–เป‰เบฒเบกเบฑเบ™เป€เบ›เบฑเบ™ idiomatic, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเบฝเบ”เบŠเบฑเบ‡เบ—เบตเปˆเบˆเบฐเป€เบซเบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™ idiomatic. เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ interface{} - เป€เบ›เบฑเบ™ farce, เปเบฅเบฐเปƒเบ™เบžเบฒเบชเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญ bypass เบžเบดเบก. เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบเบฒเบ™โ€‹เป‚เบ•เป‰โ€‹เบ•เบญเบšโ€‹เบ—เบตเปˆโ€‹เป€เบ›เบปเปˆเบฒโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เปเบฅเบฐโ€‹เบ—เบธเบโ€‹เบ›เบฐโ€‹เป€เบžเบ”โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบกเบฑเบ™โ€‹, เปƒเบซเป‰โ€‹เบชเบดเบ”โ€‹เป€เบชเบฅเบตโ€‹เบžเบฒเบšโ€‹เบ—เบตเปˆโ€‹เบชเบปเบกโ€‹เบšเบนเบ™โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบ—เบธเบโ€‹เบ„เบปเบ™โ€‹. เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ™เบตเป‰เปเบกเปˆเบ™เบ‚เบตเป‰เบฎเป‰เบฒเบเบซเบผเบฒเบ, เปเบฅเบฐเบ™เบฑเป‰เบ™เบšเปเปˆเปเบกเปˆเบ™เบ—เบฑเบ‡เปเบปเบ”. เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบเบฒเบเบเบฐเบเบฑเบกเป€เบŠเบฑเปˆเบ™เบ™เบตเป‰เบ•เป‰เบญเบ‡เปƒเบŠเป‰เบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™เป€เบงเบฅเบฒเปเบฅเปˆเบ™. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ Rob Pike เบšเปเปˆเบกเบฑเบเบšเบธเบเบ„เบปเบ™เบ—เบตเปˆเบฅเปˆเบงเบ‡เบฅเบฐเป€เบกเบตเบ”เบ™เบตเป‰, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบฅเบฒเบงเป„เบ”เป‰เบเปˆเบฒเบงเป€เบ–เบดเบ‡เปƒเบ™เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบฅเบฒเบง.

เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ—เบตเปˆเบ„เบงเบ™เบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบขเปˆเบฒเบ‡เบฅเบฐเบกเบฑเบ”เบฅเบฐเบงเบฑเบ‡. เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบงเปˆเบฒเบกเบตเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™เบขเปˆเบฒเบ‡เป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”.

เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบˆเบฐโ€‹เปƒเบŠเป‰โ€‹เปเบกเปˆโ€‹เปเบšเบš D เปเบ—เบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบ„เบงเบฒเบกโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบ™เบตเป‰โ€‹. เบกเบตเปƒเบœเป€เบงเบปเป‰เบฒเปเบ™เบงเบ™เบฑเป‰เบ™เป„เบ”เป‰เปเบ™เบงเปƒเบ” interface{} เบญเปˆเบฒเบ™เป„เบ”เป‰เบซเบผเบฒเบ เบซเบผเบทเปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡เบžเบดเบกเบ›เบญเบ”เป„เบžเบšเป?

Woes เบ‚เบญเบ‡เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช

Go เบกเบตเบฅเบฐเบšเบปเบšเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเบ™เบดเบเบปเบก VCS. เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบกเบฒเบžเป‰เบญเบกเบเบฑเบš Go เบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰ เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบ”เบฒเบงเป‚เบซเบผเบ”, เบชเป‰เบฒเบ‡ เปเบฅเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบฅเบฐเบซเบฑเบ”เบˆเบฒเบเบžเบงเบเบกเบฑเบ™เป„เบ”เป‰เปƒเบ™เบ„เบฑเป‰เบ‡เบ”เบฝเบง. เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ™เบตเป‰เปเบกเปˆเบ™เบ”เบต, เบกเบตเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบเบฑเบšเบชเบฐเบšเบฑเบš! เปเบกเปˆเบ™เปเบฅเป‰เบง, เบกเบฑเบ™เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบˆเบฒเบเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เป€เบŠเบฑเปˆเบ™: github เบซเบผเบท bitbucket เป‚เบ”เบเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบท Go, เปเบ•เปˆเบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบฅเบฐเบšเบธเบชเบฐเบšเบฑเบšเป„เบ”เป‰. เปเบฅเบฐเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบ„เบงเบฒเบกเบ‡เปˆเบฒเบเบ”เบฒเบเปƒเบ™เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบ‚เบญเบ‡เบ›เบฐเป‚เบซเบเบ”. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเปƒเบˆเป€เบซเบ”เบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง.

เบซเบผเบฑเบ‡เบˆเบฒเบเบ–เบฒเบกเบ„เปเบฒเบ–เบฒเบกเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ™เบตเป‰, เบ—เบตเบกเบ‡เบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ Go เป„เบ”เป‰เบชเป‰เบฒเบ‡ เบเบฐเบ—เบนเป‰ forum, เบŠเบถเปˆเบ‡เป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฐเบกเบฒเบ™เบšเบฑเบ™เบซเบฒเบ™เบตเป‰. เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเบ„เบฑเบ”เบฅเบญเบเบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเปƒเบ™เบกเบทเป‰เบซเบ™เบถเปˆเบ‡เปเบฅเบฐเบ›เปˆเบญเบเปƒเบซเป‰เบกเบฑเบ™ "เป€เบ›เบฑเบ™เบขเบนเปˆ." เบžเบงเบเป€เบ‚เบปเบฒเบเปเบฒเบฅเบฑเบ‡เบ„เบดเบ”เปเบ™เบงเปƒเบ”? เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบฅเบฐเบšเบปเบšเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเป€เบงเบตเบŠเบฑเบ™เบ—เบตเปˆเปœเป‰เบฒเบญเบฑเบ”เบชเบฐเบˆเบฑเบ™เบ”เป‰เบงเบเบเบฒเบ™เปเบ—เบฑเบ เปเบฅเบฐ เบฎเบญเบ‡เบฎเบฑเบšเป€เบงเบตเบŠเบฑเบ™เบ—เบตเปˆเบœเบนเป‰เบชเป‰เบฒเบ‡ Go เบšเปเปˆเบชเบปเบ™เปƒเบˆ เปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเบชเบณเป€เบ™เบปเบฒเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ—เบตเปˆเบกเบฒ.

เบเบฐเป€เบ›เบปเป‹เบฒเบงเบฑเบ”เบ—เบฐเบ™เบฐเบ—เปเบฒเบˆเบฒเบ Xi

เปƒเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบ, Go เป„เบ”เป‰เบ–เบทเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเป‚เบ”เบเบ„เบปเบ™เบ—เบตเปˆเปƒเบŠเป‰ C เบ•เบฐเบซเบผเบญเบ”เบŠเบตเบงเบดเบ”เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปเบฅเบฐเป‚เบ”เบเบœเบนเป‰เบ—เบตเปˆเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบฅเบญเบ‡เบชเบดเปˆเบ‡เปƒเบซเบกเปˆ. เบžเบฒเบชเบฒเบชเบฒเบกเบฒเบ”เบ–เบทเบเบญเบฐเบ—เบดเบšเบฒเบเป€เบ›เบฑเบ™ C เบ—เบตเปˆเบกเบตเบฅเปเป‰เป€เบžเบตเปˆเบกเป€เบ•เบตเบก (orig.: เบฅเปเป‰โ€‹เบเบฒเบ™โ€‹เบเบถเบโ€‹เบญเบปเบšโ€‹เบฎเบปเบกโ€‹). เบšเปเปˆเบกเบตเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เปƒเบซเบกเปˆเปƒเบ™เบกเบฑเบ™, เบเบปเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบ‚เบฐเบซเบ™เบฒเบ™ (เป€เบŠเบดเปˆเบ‡, เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบกเบฐเบซเบฑเบ”) เปเบฅเบฐเบ™เบตเป‰เปเบกเปˆเบ™เบ„เบงเบฒเบกเบญเบฑเบšเบญเบฒเบ. เป€เบˆเบปเป‰เบฒเบกเบตเบ„เบงเบฒเบกเบ‚เบฐเปœเบฒเบ™เบญเบฑเบ™เบ”เบตเป€เบฅเบตเบ”เปƒเบ™เบžเบฒเบชเบฒเบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰, เบ‚เบตเป‰เบ„เป‰เบฒเบ™.

เบญเบตเบเบšเบฑเบ™เบซเบฒเปœเบถเปˆเบ‡เบ—เบตเปˆเปœเป‰เบฒเบ•เบปเบเปƒเบˆเบเปเบ„เบท Go เป€เบ›เบฑเบ™เบžเบฒเบชเบฒเบ‚เบฑเป‰เบ™เบ•เบญเบ™ (เบ„เบทเบเบฑเบšเบ„เบงเบฒเบกเบขเป‰เบฒเบ™เบ—เบตเปˆเบ‡เบฝเบšเป†เบ‚เบญเบ‡ C). เบ—เปˆเบฒเบ™เบชเบดเป‰เบ™เบชเบธเบ”เบเบฒเบ™เบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบเป€เบเบปเปˆเบฒเปเบเปˆเปเบฅเบฐเบฅเป‰เบฒเบชเบฐเป„เบซเบก. เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบฎเบนเป‰โ€‹เบงเปˆเบฒโ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบฎเบฑเบ”โ€‹เบเบธเบกโ€‹เบงเบฑเบ”โ€‹เบ–เบธโ€‹เปเบกเปˆเบ™โ€‹เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เบฅเบนเบโ€‹เบ›เบทเบ™โ€‹เป€เบ‡เบดเบ™, เปเบ•เปˆโ€‹เบงเปˆเบฒโ€‹เบกเบฑเบ™โ€‹เบˆเบฐโ€‹เป€เบ›เบฑเบ™โ€‹เบเบฒเบ™โ€‹เบ”เบตโ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบชเบฒโ€‹เบกเบฒเบ” abstract เบฅเบฒเบโ€‹เบฅเบฐโ€‹เบญเบฝเบ”โ€‹เป€เบ›เบฑเบ™โ€‹เบ›เบฐโ€‹เป€เบžเบ”โ€‹เปเบฅเบฐโ€‹เบชเบฐโ€‹เบซเบ™เบญเบ‡โ€‹เบเบฒเบ™ encapsulation.

เบ„เบงเบฒเบกเบ‡เปˆเบฒเบเบ”เบฒเบเบชเปเบฒเบฅเบฑเบšเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡

Go เป„เบ”เป‰เบ–เบทเบเบญเบญเบเปเบšเบšเปƒเบซเป‰เบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเบกเบฑเบ™เบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เปƒเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ™เบฑเป‰เบ™. เบกเบฑเบ™เบ–เบทเบเบ‚เบฝเบ™เป„เบงเป‰เบชเปเบฒเบฅเบฑเบšเบ™เบฑเบเบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ—เบตเปˆเบญเปˆเบญเบ™เปเบญ, เปƒเบŠเป‰เบžเบฒเบชเบฒเป€เบเบปเปˆเบฒเป€เบ›เบฑเบ™เปเบกเปˆเปเบšเบš. เบกเบฑเบ™เบกเบฒเบžเป‰เบญเบกเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบชเบปเบกเบšเบนเบ™เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบ. เบกเบฑเบ™เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเบญเปˆเบฒเบ™เปเบฅเบฐเบ‡เปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เปƒเบŠเป‰.

เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เป€เบงเบปเป‰เบฒเบซเบผเบฒเบ, เบšเปเปˆเบ›เบฐเบ—เบฑเบšเปƒเบˆ, เปเบฅเบฐเบšเปเปˆเบ”เบตเบชเปเบฒเบฅเบฑเบšเบ™เบฑเบเบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ—เบตเปˆเบชเบฐเบซเบฅเบฒเบ”.

ะกะฟะฐัะธะฑะพ mersinvald เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบเป‰เป„เบ‚

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™