Brighter Myanmar Computer Programming သင်တန်းမှ Go ( Golang ) Programming ဘာသာရပ်အား ဖွင့်လှစ် သင်ကြားပေသွားမည်၊
Brighter Myanmar Computer Programming သင်တန်းမှ Go ( Golang ) Programming ဘာသာရပ်အား ဖွင့်လှစ် သင်ကြားပေသွားမည်၊
Go Programming ကို ဘာလို့ လေ့လာသင့်သလဲ
2007 ခုနှစ်ထဲမှာ ထောင်ချီတဲ့ Google Developers တွေဟာ Server Computers ပေါင်းများစွာပါဝင်တဲ့ ဧရာမှ Server System တစ်ခုကို Develope ခဲ့ကြပါတယ်၊ ဒီတုန်းက Google က Global data centers , Google File System , Big table နဲ့ အခြား Google ကိုယ်ပိုင် Internal Build System တွေနဲ့ Microservices တွေ High Traffic Services တွေ ဖြစ်တဲ့ Google Search, Gmail နဲ့ Youtube တို့လို ဧရာမ Projects တွေကို ဝင်ဆောင်မှုပေးနေပါပြီ၊
ဒီ Projects တွေအားလုံးအတွက် Google Developers တွေက C++, Java နဲ့ Python ဆိုပြီး Programming ဘာသာရပ် ၃ ခုကို အသုံးပြုခဲ့ကြပါတယ်၊ ဒီဘာသာရပ် ၃ ခုနဲ့ပါ လုပ်ငန်းစဥ် ထောင်ပေါင်းများစွာ ပါဝင်တဲ့ Messive System တွေကို Develop လုပ်နေတာပါ၊ ဒါပေမယ့် ဒီဘာသာရပ် ၃ မျိုးက နဲနဲ ပြဿနာရှိနေတယ်၊
C++ က အရမ်းမြန်တယ် ဒါပေမယ့် Copile လုပ်ရတာ နှေးပြီး ရှုပ်ထွေးတဲ့ Syntax တွေသုံးရလို့ maintainance လုပ်ရ အရမ်းခက်တယ်
Java က အထနှေးပြီး Runtime Process အတွက် Processing Power တအားသုံးရပါတယ်၊ (အောက်မှာ မှတ်ချက်ရေးထားတယ် )
Python က ရေးရတာလွယ်တယ် ဒါပေမယ့် Transpile Langauge ဖြစ်လို့ အရမ်းနှေးတယ် Server-Level Performance အတွက် အဆင်မပြေဘူး
ဒီလို ပြဿနာတွေကြောင့် C++, Java နဲ့ Python တို့က လက်တွေ့ Massive Scale Project တွေအတွက် အဆင်မပြေဘူး ဖြစ်နေတယ်၊ အဲ့ဒီ့ လို Large Scale Project တွေအတွက် Dedicate ထားတဲ့ Language တစ်ခု က လိုကို လိုနေတာ၊ ဒီတော့ Google က Developers တွေဖြစ်တဲ့ Robert Griesemer, Rob Pike နဲ့ Ken Thompson တို့က C++ လို အမြန်နှုန်း Java လို Scalability နဲ့ Security ကောင်းခြင်းမျိုး Python လို ရေးရတာ ရှိုးရှင်းမူ စတဲ့ Fetures တွေကို Support ပေးတဲ့ ဘာသာရပ် တစ်ခု တည်ဆောက်ဖို့ ဆုံးဖြတ်လိုက်ပါတယ်၊ ဒီလိုနဲ့ GO ကို Develop လုပ်ခဲ့ကြတာပါ၊
ရလဒ်အနေနေဲ့
Server Side အတွက် Robust ဖြစ်ခြင်း
Scalable ဖြစ်ခြင်း ( distributed systems, cloud infrastructure, and backend services )
တစ်ပြိုင်ထဲမှာ သန်းနဲ့ချီတဲ့ requests တွေကို အလုပ်လုပ်နိုင်ခြင်း ( Concurrency )
Compile လုပ်ရတာ မြန်ဆန်ခြင်း
ကြီးမားတဲ့ လုပ်ငန်းစဥ်တွေကို Memory အနဲဆုံးသုံးပြီးလုပ်နိုင်ခြင်း ( Efficiency )
ရေးသားရတာ ရိုးရှင်း လွယ်ကူခြင်း
စတဲ့ အားသာချက်တွေ ပါဝင်တဲ့ GO Programming ဘာသာရပ် ထွက်ပေါ်လာခဲ့ပါတယ်၊ Go ရဲ့ အထူးပြောင်မြောက်တဲ့ Features တွေကတော့
Goroutines and Channels
ရှုပ်ထွေးလှတဲ့ လုပ်ငန်းစဥ်တွေ အများကြီးကို တစ်ခုကို တစ်ခု မစောင့်ပဲတစ်ပြိုင်ထဲ လုပ်ကိုင် တဲ့ Concurrency ပိုင်းမှာ တော့ Go Programming က အားအသာဆုံးပါပဲ၊ Lock ချစရာ မလိုတော့ပါဘူး၊ Concurrency အတွက် Goroutines တွေက တာဝင်ယူ အလုပ်လုပ်ဆောင်ပြီး အလုပ်လုပ်နေတဲ့ Goroutines တွေကြား Data Sharing နှင့် Communication အတွက် Channels တွေ က နေတဆင့် ဆက်သွယ် အလုပ်လုပ်နိုင်အောင် ဖန်တီးထားပါတယ်၊ ဒီလို Goroutine တွေအကြား ဆက်သွယ်ပေးတဲ့ Memory Sharing လုပ်ပေးတာတွေလုပ်ကိုင်လို့ Channels တွေကို Pipes လိုင်း တွေလို့လဲခေါ်ကြပါတယ်၊ ဒီလို Channels တွေရှိလို့ Data တွေကို Memory ကနေ Goroutine တစ်ခုစီက တိုက်ရိုက် ရယူ အသုံးပြုစရာ မလိုပဲ Goroutine တစ်ခုနဲ့ တစ်ခုကြား Sharing လုပ်ပြီး မျှဝေသုံးဆွဲ နိုင်ပါတယ်၊
Goroutine တွေက Operating System (OS) က စီမံခန့်ခွဲသော threads များ မဟုတ်ဘဲ Go runtime က စီမံသည့် အလွန်ပေါ့ပါးသော "threads" တွေဖြစ်ပါတယ်၊ Goroutines ထောင်ပေါင်းများစွာ သို့မဟုတ် သန်းပေါင်းများစွာကို အလွယ်တကူ run နိုင်ပါတယ်။ function တစ်ခု၏ ရှေ့တွင် `go` ဟူသော keyword ကို ထည့်လိုက်ရုံဖြင့် `go myFunction()` ဟု ခေါ်ဆို အသုံးပြုနိုင်ပါတယ်။
Simplicity and Readability
Go မှာ keywords ၂၅ ခုပဲ ပါပါတယ်၊ ရိုးရှင်းလွန်းလို့ လေ့လာရတာလဲ အရမ်းကို လွယ်သလို Maintain လုပ်ရတာလဲ တအားလွယ်ပါတယ်၊
Classes တွေ inheritance တွေမပါဘူး၊ ဒီတွက် Composition ကိုသုံးထားသလို၊ Method, operator Overloading တွေ မပါပါဘူး Method တစ်ခုအတွက် တိကျတဲ့ လုပ်ဆောင်ချက် တစ်ခုသာထားရှိပါတယ်၊ Go နှင့်အတူ ပါဝင်သော `gofmt` ဆိုသည့် tool က code များကို စံသတ်မှတ်ထားသော ပုံစံ (standard style) တစ်ခုတည်း ဖြစ်အောင် အလိုအလျောက် format ချပေးသောကြောင့် code ပုံစံ အထားအသိုနှင့် ပတ်သက်ပြီး အငြင်းပွားစရာ မလိုဘဲ Go code အားလုံးသည် ရင်းနှီးသော ပုံစံတူ ဖြစ်နေစေသည်။
High Performance
GO Program ကို Build လုပ်တဲ့အခါ machine code အဖြစ် တိုက်ရိုက် compile လုပ်သောကြောင့် အမြန်နှုန်းမှာ C++ နှင့် Java တို့နဲ့ ယှဥ်နိုင်ပါတယ်၊ compiler ကလည်း အလွန် လျင်မြန်သောကြောင့် build time (compile လုပ်ချိန်) တိုတောင်းပြီး developer များအတွက် အချိန်မပေးရပါ၊
Garbage Collection (မလိုအပ်တော့သော memory များကို အလိုအလျောက် ရှင်းလင်းခြင်း)
Go က memory management (မှတ်ဉာဏ် စီမံခန့်ခွဲမှု) ကို Developer ကိုယ်တိုင်လုပ်ဆောင်စရာ မလိုအောင် တည်ဆောက်ပေးထားပါတယ်၊ Go မှာ ထိရောက်ပြီး၊ တစ်ပြိုင်တည်း အလုပ်လုပ်နိုင်ကာ၊ နှောင့်နှေးမှု အလွန်နည်းပါးသော **garbage collector (GC)** ပါဝင်ပါတယ်၊ ဒီအချက်က developer များကို C/C++ ကဲ့သို့ memory ကို ကိုယ်တိုင် စီမံခန့်ခွဲရခြင်းမှ လွတ်ကင်းစေပြီး memory leaking ကဲ့သို့သော အမှားအယွင်းများကို ရှောင်ရှားစေနိုင်သည်။
Static Typing (Compile အချိန်တွင် Type စစ်ဆေးခြင်း)
GO က statically typed programming ဘာသာရပ် အမျိုးအစားဖြစ်ပါတယ်၊ variable များ၏ type (အမျိုးအစား) ကို program မ run ခင် compile လုပ်သည့် အချိန်ကတည်းက စစ်ဆေးပေးပါတယ်၊ ဒါကြောင့် program မ run မီ အမှားအယွင်း အများအပြားကို ကြိုတင် သိရှိစေနိုင်ပါတယ်၊
Go မှာ type inference (ဥပမာ `x := 10` ဟု သတ်မှတ်ရုံဖြင့် type ကို အလိုအလျောက် သိရှိခြင်း) ကို အသုံးပြုနိုင်သောကြောင့် အခြား static language များကဲ့သို့ type များကို အရှည်ကြီး ရေးသားရခြင်း မရှိဘဲ ပေါ့ပါးစေသည်။
Powerful Standard Library
Go မှာ အရမ်းအသုံးဝင်တဲ့ Buil-in standard library တွေပါရှိပါတယ်၊ အခြား ဘာသာရပ်တွေမှာ third-party library များသုံးမှ လုပ်ဆောင်ချက် အများအပြားကို Go တွင် built-in ထည့်သွင်းပေးထားသည်။
Web development အတွက် ပြည့်စုံသော HTTP server နှင့် client
JSON encoding နှင့် decoding လုပ်ရန် tools များ
Cryptography (လျှို့ဝှက်ကုဒ်) နှင့် compression (ဖိုင်အရွယ်အစား ချုံ့ခြင်း) library များ
Testing (စမ်းသပ်ခြင်း) နှင့် profiling (စွမ်းဆောင်ရည် ဆန်းစစ်ခြင်း) framework များ
Single Binary Deployment
Go compiler က application ကို သက်ဆိုင်ရာ platform (Windows, macOS, Linux စသည်) တို့အတွက် **statically-linked binary file** တစ်ခုတည်း အဖြစ် ထုတ်ပေးသည်။ binary file တစ်ခုတည်းမှာ application code များအပြင် ၎င်းက မှီခို အသုံးပြုထားသော dependency အားလုံး (C library များမှလွဲ၍) တစ်ပါတည်း ပါဝင်သည်။ ဒီအချက်က deployment (အသုံးပြုရန် ဖြန့်ချိခြင်း) ကို အလွန်တရာ ရိုးရှင်းစေပါတယ်၊ ထို binary file တစ်ခုတည်းကို server ပေါ်သို့ copy ကူးပြီး run လိုက်ရုံသာ ဖြစ်သည်။ Runtimes များ၊ virtual machines များ သို့မဟုတ် dependency များ ထပ်မံ install လုပ်ရန် မလိုအပ်တော့ပါ။
အလုပ်အကိုင် အခွင့်အလမ်း
Cloud Infrastructure တွေတည်ဆောက်တဲ့ Software နဲ့ Handware ပေါင်းဆက်ပြီး Visualization Tools တွေ Management Tools တွေတည်တဲ့ လုပ်ငန်းစဥ်တွေမှာ Go Developer တွေကို အရမ်းခေါ်ပါတယ်၊ Backend Api Services ရေးတဲ့ Companies တွေကလဲ Golang Developers တွေကို အရမ်းခေါ်သလို Gaming Companies တွေကလဲ Backend Services တွေရေးဖို့ Go Developers တွေကို ခေါ်ပါတယ်၊ DevOps Tools တွေဖြစ်တဲ့ Kubernetes, Docket tools တို့ GCP နဲ့ AWS တို့လို Colud Platforms Infrastructure တည်ဆောက်တဲ့ Companies တွေကလဲ Go Developers တွေကို ခေါ်ပါတယ်၊ Backend Engineer, Site Reliability Engineer, System Engineer, Network & performance Tools Engineer စသဖြင့် အမျိုးမျိုးသော ခေါင်းစဥ်တွေ သုံးပြီး Go Developers တွေကို အလုပ်ခေါ်ကြပါတယ်၊
Golang နဲ့ ဘာတွေလုပ်နိုင်လဲ
Backend Api တွေရေးတာမျိုး၊ အရမ်းမြန်တဲ့ REST Services တွေရေးတာမျိုး၊
Microservices Server တွေရေးတာမျိုး၊
Kubernetes တို့လို Container တွေအတွက် Tool တွေရေးတာမျိုး
load balancers တည်ဆောက်တာမျိုး၊
Real Time Network Apps တွေရေးတာမျိုး၊
Single Binary CLI Tools တွေရေးတာမျိုး၊
Online Server အနေနဲ့ File Convert လုပ်တာမျိုး ( CSV ကနေ Json ပြောင်းတာမျိုး၊ .png ကနေ .ico ပြောင်းတာမျိုး, Image resizing)
Websocekt ကို အသုံးပြုတဲ့ လုပ်ငန်းစဥ်အမျိုးမျိုး ( RealTime Chatting တို့ )
အခြားလဲ အများအများကြီး ရေးနိုင်ပါတယ်၊
မှတ်ချက်
အတိုးချုပ်ရရင် GO ကို Performance များပြီး ကြီးမားတဲ့ System တွေနဲ့ Concurrency System တွေကို မြန်ဆန်ပြီး ရိုးရိုးရှင်းရှင်း အလုပ်လုပ်လို့ရအောင် ဖန်တီးခဲ့တာဖြစ်ပါတယ်၊ Google မှာသုံးနေတဲ့ ရှိရင်းဆွဲဘာသာရပ်တွေရဲ့ အားနဲချက်ကို စိတ်ကုန်လွန်းလို့ ဖန်တီးခဲ့တာ ဖြစ်ပြီး C လိုမြန်ပြီး Python လို ရေးရလွယ်တာ မျိုး လိုချင်လို့ ဖန်တီးခဲ့တာ ဖြစ်တယ်လို့ Go Co-Creator ဖြစ်တဲ့ Rob Pike က ပြောခဲ့ပါတယ်၊ ဒီလို Distributed System တွေကို ဖန်တီးခဲ့တဲ့အတွက် နောက်ပိုင်း GCP လဲ စတင်ကော GO က Google Cloud Platform မှာ သုံးတဲ့ အဓိက ဘာသာရပ် ဖြစ်လာခဲ့ပါတယ်၊
Java Applications တွေက Java Runtime Environment ( JRE ) ပေါ်မှာ မှီခိုပြီး အလုပ်လုပ်ပါတယ်၊ JRE Environment ထဲမှာ Java Virtual Machine (JVM) , Class Libraries တွေနဲ့ အခြား Components တွေရယ်ပါဝင်ပါတယ်၊ ဒါတွေအားလုံး ပြည့်စုံအောင် Staup လုပ်ပြီး Run ရလို့ Java က အရမ်းကို RunTime လေးတယ် ပြောတာပါ၊ Java Code တွေကို CPU က တိုက်ရိုက် Process မလုပ်နိုင်ပါဘူး၊ Java Code တွေကို JVM ထဲမှာ အရင် Run ရပါတယ်၊ JVM ကမှ CPU မှာ တိုက်ရိုက် Process လုပ်နိုင်တဲ့ bytecode တွေအဖြစ် ပြောင်းပေးပါတယ်၊ JVM က Memory (RAM) တအားစားပါတယ်၊ ဒီကြားထဲ JVM ကပဲ Garbage Collection နဲ့ Java Threds တွေကို ကိုင်တွယ် အလုပ်လုပ်ရတော့ ပိုပြီး Memory စားပါသေးတယ်၊ JVM က Just In Time Compiler ကို သုံးပြီး Code Optimizes တာ တွေလဲ ရှိသေးလို့ လုပ်ငန်းစဥ်ပိုမို ရှုပ်ထွေးပြီး Long Running App တွေအတွက် Maintenance လုပ်ရတာ နားလည်ရတာ တော်တော် ခက်ပါတယ်၊ အတိုချုပ်ပြောရရင်တော့ အခြားဘာသာရပ်တွေဖြစ်တဲ့ Go, Rust တို့နဲ့ ယှဥ်ရင် Java သုံးဖို့ System Resources ပိုပြီး ကုန်ပါတယ်၊
အထနှေးပြီး တယ်ဆိုတာကလဲ အခြား navtive binaries export ထုတ်တဲ့ ဘာသာရပ်တွေ Scripting Lanagues တွေနဲ့ ယှဥ်ရင် နှးတာကိုပြောတာပါ၊ Virtual Machine ကို Loading လုပ်တဲ့အချိန် Verify လုပ်တဲ့အချိန် Class ဖိုင်တွေနဲ့ အခြား linker တွေကို ချိတ်တဲ့အချိန် စသဖြင့် အချိန်ကြာပြီး main() function ကို ခေါ်ဖို့ကို အတော်နဲ့ မစနိုင်ဘူး ဖြစ်နေပါတယ်၊ Just In Time Compiler (JIT) ကလဲ JVM က စစခြင်းမှာ bytecode တွေကို machine code ပြောင်းဖို့ စလုပ်ရတာဖြစ်လို့ latency (Response နှောင့်နှေးကြန့်ကြာမှု ) ရှိနေပါသေးတယ်၊ Sprint Boot တို့လို Large Frameworks တွေကို classes တွေ အခြား Configurations တွေကို တပျော်တပါးကြီး Loading လုပ်တာ Run တဲ့အချိန်ကို မရောက်တော့ဘူး၊ ဒါက Large Scale Projects တွေ Distributed System တွေ မှာအသုံးပြုဖို့ နိုင်ယှဥ်တဲ့ အနေနဲ့ ပြောတာပါ၊ ပုံမှန်တော့ သူလဲ ဘုရင်ပဲ၊ Programming လောကကို အုပ်ချုပ်လာခဲ့တာ ကြာပေါ့၊ ပုံမှန် Projects လေးတွေတော့ ဒီလောက်ကို စဥ်းစားစရာ မလိုပါဘူး၊ အေးဆေး၊
Useful Links
Class Fee & Contact
- သင်တန်းကြေး 5 သိန်း ( Brighter Myanmar မှာ မည်သည့် အတန်းတက်ဖူးသူမဆို ၁ သိန်းလျှော့ )
- Ph 09-950-45-333-7
- Page Chat Box ကနေ ပြီး သိလိုတဲ့အချက်တွေကို မေးနိုင်ပါတယ်၊