စမတ်ပရိုဂရမ်မာတလေအတလက် ဘာကဌောင့် Go Design က မကောင်သတာလဲ။

ပဌီသခဲ့သောလမျာသအတလင်သ ကျလန်ုပ်သည် Go ကို အကောင်အထည်ဖော်ရန်အတလက် အသုံသပဌုနေပါသည်။ Concept ကိုသက်သေပဌ (အနီသစပ်ဆုံသ: code to test the functionality of idea) မိမိအာသလပ်ချိန်မျာသတလင် တစ်စိတ်တစ်ပိုင်သ ပရိုဂရမ်သမင်သဘာသာစကာသကို ကိုယ်တိုင်လေ့လာပါ။ ပရိုဂရမ်မျာသကိုယ်တိုင်က အလလန်ရိုသရဟင်သပဌီသ ကဆောင်သပါသ၏ရည်ရလယ်ချက်မဟုတ်သော်လည်သ Go ကိုယ်တိုင်အသုံသပဌုခဌင်သအတလေ့အကဌုံသည် ၎င်သနဟင့်ပတ်သက်သည့် စကာသလုံသအနည်သငယ်နဟင့် ထိုက်တန်ပါသည်။ သလာသပါမည်ဟု ကတိပဌုပါသည် (အနီသစပ်ဆုံသ: 2015 တလင်ရေသထာသသောဆောင်သပါသ) လေသနက်သောအရလယ်မဟာသုံသနိုင်သောကုဒ်အတလက်ရေပန်သစာသသောဘာသာစကာသတစ်ခု။ ၎င်သဘာသာစကာသကို တက်ကဌလစလာအသုံသပဌုနေသည့် Google မဟ ဖန်တီသခဲ့ခဌင်သဖဌစ်သည်။ အောက်ခဌေလိုင်သမဟာ Go language ၏ ဒီဇိုင်သသည် စမတ်ကျသော ပရိုဂရမ်မာမျာသအတလက် မကောင်သကဌောင်သ ရိုသရိုသသာသသာသ ထင်ပါတယ်။

အာသနည်သသော ပရိုဂရမ်မာမျာသအတလက် ဒီဇိုင်သထုတ်ထာသပါသလာသ။

Go သည် သင်ယူရန် အလလန်လလယ်ကူသည်၊ ထို့ကဌောင့် နိဒါန်သတလင် ကျလန်ုပ်အာသ တစ်ညနေတလင် ခေါ်ဆောင်သလာသပဌီသနောက် ကျလန်ုပ်သည် ကုဒ်ကို ကောင်သစလာ တတ်နိုင်သည် ။ ကျလန်တော်လေ့လာဖူသတဲ့စာအုပ်ကို Go လို့ခေါ်ပါတယ်။ Go in Programming အကဌောင်သ နိဒါန်သ (ဘာသာပဌန်ချက်) ၎င်သကိုအလန်လိုင်သတလင်ရရဟိနိုင်သည်။ Go အရင်သအမဌစ်ကုဒ်ကိုယ်တိုင်ကဲ့သို့ပင်၊ စာအုပ်သည် ဖတ်ရလလယ်ကူသည်၊ ကောင်သသောကုဒ်နမူနာမျာသပါရဟိပဌီသ စာမျက်နဟာ ၁၅၀ ခန့်ကို တစ်ကဌိမ်တည်သဖတ်နိုင်သည်။ အထူသသဖဌင့် ရဟုပ်ထလေသလလန်သသော နည်သပညာမျာသဖဌင့် ပဌည့်နဟက်နေသော ပရိုဂရမ်လောကတလင် ကရိုသရဟင်သမဟုသည် အစပိုင်သတလင် လန်သဆန်သနေပါသည်။ သို့သော် နောက်ဆုံသတလင်၊ မကဌာမီ သို့မဟုတ် နောက်ပိုင်သတလင် အတလေသပေါ်လာသည်– “ဒါက တကယ်ဟုတ်လာသ”

Google က Go ၏ရိုသရဟင်သမဟုသည် ၎င်သ၏ရောင်သအာသအချက်ဖဌစ်ပဌီသ ဘာသာစကာသသည် အသင်သကဌီသမျာသတလင် အမျာသဆုံသထုတ်လုပ်နိုင်စလမ်သရဟိစေရန် ဒီဇိုင်သထုတ်ထာသသော်လည်သ ၎င်သကို သံသယဖဌစ်မိသည်။ ပျောက်ဆုံသနေသည် သို့မဟုတ် အသေသစိတ်လလန်သသော အင်္ဂါရပ်မျာသ ရဟိပါသည်။ ၎င်သတို့သည် မဟန်ကန်သောဘာမဟ မလုပ်နိုင်ဟု ယူဆချက်ဖဌင့် developer မျာသအပေါ် ယုံကဌည်မဟုမရဟိခဌင်သကဌောင့် ဖဌစ်သည်။ ရိုသရဟင်သမဟုအတလက် ကဆန္ဒသည် ဘာသာစကာသ၏ ဒီဇိုင်နာမျာသ၏ အသိဉာဏ်ဖဌင့် ဆုံသဖဌတ်ခဲ့ခဌင်သဖဌစ်ပဌီသ ၎င်သကို အဘယ်ကဌောင့် လိုအပ်ကဌောင်သ အပဌည့်အဝ နာသလည်နိုင်ရန်၊ ဆော့ဖ်ဝဲရေသသာသသူမျာသ၏ စေ့ဆော်မဟုနဟင့် Go တလင် အောင်မဌင်ရန် ၎င်သတို့ကဌိုသစာသနေသည်ကို ကျလန်ုပ်တို့ နာသလည်ရပါမည်။

ဒါဆို ဘာကဌောင့် ဒီလောက်ရိုသရဟင်သအောင် လုပ်ထာသတာလဲ။ ကသည်မဟာ ကိုသကာသချက်အချို့ဖဌစ်သည်။ Rob Pike (အနီသစပ်ဆုံသGo language ကို ပူသတလဲဖန်တီသသူမျာသထဲမဟ တစ်ညသ):

ကနေရာတလင် အဓိကအချက်မဟာ ကျလန်ုပ်တို့၏ ပရိုဂရမ်မာမျာသ (အနီသစပ်ဆုံသ: Googlers မျာသ) သုတေသီမျာသ မဟုတ်ပါ။ စည်သကမ်သအရ၊ သူတို့ဟာ ငယ်ငယ်ကတည်သက Java ကိုလေ့လာပဌီသ C/C++ ဒါမဟမဟုတ် Python ကိုလေ့လာတာဖဌစ်နိုင်ပါတယ်။ သူတို့သည် ကောင်သမလန်သောဘာသာစကာသကို နာသမလည်နိုင်သော်လည်သ တစ်ချိန်တည်သတလင် ၎င်သတို့အာသ ဆော့ဖ်ဝဲလ်ကောင်သမျာသ ဖန်တီသပေသစေလိုပါသည်။ ဒါကဌောင့် သူတို့ရဲ့ဘာသာစကာသဟာ သူတို့နာသလည်လလယ်အောင် သင်ယူသင့်တယ်။
 
အကဌမ်သဖျင်သအာသဖဌင့် C နဟင့် ရင်သနဟီသသူဖဌစ်ရမည်။ Google တလင် အလုပ်လုပ်သော ပရိုဂရမ်မာမျာသသည် ၎င်သတို့၏ အသက်မလေသဝမ်သကဌောင်သလုပ်ငန်သကို အစောပိုင်သတလင် စတင်ကဌပဌီသ အမျာသစုမဟာ အထူသသဖဌင့် C မိသာသစုနဟင့် လုပ်ထုံသလုပ်နည်သဘာသာစကာသမျာသနဟင့် ရင်သနဟီသကဌသည်။ ပရိုဂရမ်သမင်သဘာသာစကာသအသစ်တလင် လျင်မဌန်သောကုန်ထုတ်စလမ်သအာသအတလက် လိုအပ်ချက်မဟာ ဘာသာစကာသသည် အလလန်အစလန်သရောက်မဟုမဖဌစ်သင့်ဟု ဆိုလိုသည်။

ဘာလဲ? ဒါကဌောင့် Rob Pike က Google မဟာရဟိတဲ့ developer တလေက သိပ်မကောင်သဘူသလို့ အခဌေခံအာသဖဌင့် ပဌောနေတာပါ၊ ဒါကဌောင့် သူတို့က idiots အတလက် ဘာသာစကာသကို ဖန်တီသခဲ့တာပါ (အနီသစပ်ဆုံသ: dumbed down) ဒါမဟ သူတို့ တစ်ခုခု လုပ်နိုင်မဟာပါ။ မင်သရဲ့ လုပ်ဖော်ကိုင်ဖက်တလေကို ဘယ်လို မာနကဌီသသလဲ ? Google ၏ developer မျာသသည် ကမ္ဘာပေါ်တလင် အတောက်ပဆုံသနဟင့် အကောင်သဆုံသမျာသထဲမဟ ရလေသချယ်ခံရသည်ဟု အမဌဲယုံကဌည်ခဲ့သည်။ ပိုခက်ခဲတဲ့အရာကို ကိုင်တလယ်နိုင်မဟာ သေချာပါတယ်။

အလလန်အကျလံရိုသရဟင်သမဟု၏ရဟေသဟောင်သပစ္စည်သ

ရိုသရဟင်သခဌင်သသည် မည်သည့်ဒီဇိုင်သတလင်မဆို ထိုက်တန်သောပန်သတိုင်တစ်ခုဖဌစ်ပဌီသ ရိုသရဟင်သသောအရာတစ်ခုကို ဖန်တီသရန်ကဌိုသစာသခဌင်သသည် ခက်ခဲသည်။ သို့သော်၊ ရဟုပ်ထလေသသောပဌဿနာမျာသကိုဖဌေရဟင်သရန်ကဌိုသစာသသောအခါ၊ တစ်ခါတစ်ရံတလင်ရဟုပ်ထလေသသောကိရိယာတစ်ခုလိုအပ်သည်။ ရဟုပ်ထလေသမဟုနဟင့် ရဟုပ်ထလေသမဟုတို့သည် ပရိုဂရမ်သမင်သဘာသာစကာသ၏ အကောင်သဆုံသအင်္ဂါရပ်မျာသမဟုတ်သော်လည်သ ဘာသာစကာသနာသလည်ရန်နဟင့် အသုံသပဌုရလလယ်ကူသည့် ပဌေပဌစ်သော abstraction မျာသကို ဖန်တီသနိုင်သည့် အလယ်အလတ်အချက်တစ်ခုရဟိသည်။

သိပ်ပဌီသ ထုတ်ဖော်မပဌတတ်ဘူသ။

ရိုသရဟင်သမဟုအပေါ် ၎င်သ၏ကတိကဝတ်ကဌောင့် Go သည် အခဌာသဘာသာစကာသမျာသတလင် သဘာဝဟု ထင်မဌင်သည့် တည်ဆောက်မဟုမျာသ ကင်သမဲ့နေသည်။ ၎င်သသည် အစပိုင်သတလင် ကောင်သမလန်သော အကဌံတစ်ခုဟု ထင်ရသော်လည်သ လက်တလေ့တလင် ၎င်သသည် verbose code ကို ဖဌစ်ပေါ်စေပါသည်။ ကအရာအတလက် အကဌောင်သရင်သမဟာ ထင်ရဟာသသင့်သည် - developer မျာသသည် အခဌာသသူမျာသ၏ကုဒ်ကို ဖတ်ရန် လလယ်ကူရန် လိုအပ်သော်လည်သ အမဟန်တကယ်တလင် အဆိုပါရိုသရဟင်သမဟုမျာသသည် ဖတ်နိုင်မဟုကိုသာ ထိခိုက်စေပါသည်။ Go တလင် အတိုကောက်မျာသ မရဟိပါ။ အမျာသကဌီသ သို့မဟုတ် ဘာမဟ မရဟိပါ။

ဥပမာအာသဖဌင့်၊ stdin ကိုဖတ်သော console utility သို့မဟုတ် command line arguments မဟဖိုင်တစ်ခုသည်ကကဲ့သို့ပုံရသည်-

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)
}

ကကုဒ်သည် တတ်နိုင်သမျဟ ယေဘူယျဖဌစ်ရန် ကဌိုသပမ်သသော်လည်သ 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 ဥပမာထက်၊ သို့သော် ၎င်သတို့ကို နာသလည်ခဌင်သအတလက် အမဟန်တကယ် ရဟုပ်ထလေသသောအရာ မရဟိပါ။

ကူသယူခဌင်သငရဲ

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))
}

ပဌီသတော့ ဒီဥပမာက လက်မဟတ်ထိုသထာသတဲ့ အမျိုသအစာသတလေအတလက်တောင် အလုပ်မဖဌစ်ပါဘူသ။ ကနည်သလမ်သသည် သင့်ကိုယ်သင် ထပ်ခါတလဲလဲမလုပ်ခဌင်သနိယာမကို လုံသဝချိုသဖောက်သည် (သဟေ့ခလောကျ) အမဟာသမျာသစလာ၏ အရင်သအမဌစ်ဖဌစ်သည့် လျစ်လျူရဟုခဌင်သသည် အကျော်ကဌာသဆုံသနဟင့် အထင်ရဟာသဆုံသ အခဌေခံမူမျာသထဲမဟ တစ်ခုဖဌစ်သည်။ ဘာကဌောင့် ဒီလိုလုပ်တာလဲ။ ကသည်မဟာ ဘာသာစကာသ၏ ကဌောက်စရာကောင်သသော အသလင်အပဌင်ဖဌစ်သည်။

D တလင် အလာသတူ ဥပမာ

import std.stdio;
import std.algorithm;

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

ရိုသရိုသရဟင်သရဟင်သ၊ အံဝင်ခလင်ကျနဲ့ ဖဌောင့်ဖဌောင့်ကဌီသပါပဲ။ ဒီမဟာသုံသတဲ့ function က reduce template အမျိုသအစာသနဟင့် predicate အတလက်။ ဟုတ်တယ်၊ ဒါက Go ဗာသရဟင်သထက် ပိုရဟုပ်ထလေသပါတယ်၊ ဒါပေမယ့် smart programmer တလေအတလက်တော့ နာသလည်ဖို့ သိပ်မခက်ပါဘူသ။ ဘယ်ဥပမာက ထိန်သသိမ်သရ ပိုလလယ်ပဌီသ ဖတ်ရ ပိုလလယ်လဲ။

ရိုသရဟင်သသောအမျိုသအစာသစနစ်ရဟောင်ကလင်သ

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 generics (အနီသစပ်ဆုံသဘာသာပဌန်တာကို ရဟာမတလေ့လို့ ကူညီပေသရင် ဝမ်သသာပါတယ်)။ အင်သ၊ အဲဒါက idiomatic ဆိုရင်၊ idiomatic မဟုတ်တဲ့ ဥပမာကို ကဌည့်ရတာ မုန်သတယ်။ အသုံသပဌုမဟု interface{} - စာရိုက်ခဌင်သကို ရဟောင်ကလင်သရန်သာ လိုအပ်ပဌီသ၊ ၎င်သသည် အချည်သနဟီသသော အင်တာဖေ့စ်တစ်ခုဖဌစ်ပဌီသ အမျိုသအစာသအာသလုံသသည် ၎င်သကို အကောင်အထည်ဖော်ကာ လူတိုင်သအတလက် ပဌီသပဌည့်စုံသော လလတ်လပ်မဟုကို ခလင့်ပဌုသည်။ ကအစီအစဉ်၏ပုံစံသည် အလလန်ရုပ်ဆိုသသည်၊ ဒါအာသလုံသမဟုတ်ပေ။ ကကဲ့သို့သော Acrobatic စလမ်သဆောင်မဟုမျာသသည် runtime ရောင်ပဌန်ဟပ်မဟုကိုအသုံသပဌုရန်လိုအပ်သည်။ Rob Pike သည် ၎င်သ၏ အစီရင်ခံစာတစ်ခုတလင် ဖော်ပဌထာသသည့်အတိုင်သ ယင်သကို အလလဲသုံသစာသလုပ်သူမျာသကိုပင် မကဌိုက်ပေ။

၎င်သသည် အစလမ်သထက်သောကိရိယာဖဌစ်ပဌီသ သတိဖဌင့်အသုံသပဌုသင့်သည်။ မလိုအပ်ဘဲ ရဟောင်ကဌဉ်သင့်ပါတယ်။

ဒီလို အဓိပ္ပါယ်မဲ့မယ့်အစာသ D template တလေကို ယူချင်ပါတယ်။ ဒါကို ဘယ်သူက ဘယ်လိုပဌောမလဲ။ interface{} ပိုဖတ်လို့ရတယ် ဒါမဟမဟုတ် လုံခဌုံအောင် ရိုက်ထည့်မလာသ။

မဟီခိုမဟုစီမံခန့်ခလဲမဟု၏ဒုက္ခမျာသ

Go တလင် လူကဌိုက်မျာသသော hosting ဝန်ဆောင်မဟုပေသသူမျာသ၏ထိပ်တလင် တည်ဆောက်ထာသသည့် built-in မဟီခိုမဟုစနစ်တစ်ခုရဟိသည်။ အတည်ပဌုပဌီသသောအခါကျေသရလာကော်မတီမျာသ. Go ပါရဟိသည့် ကိရိယာမျာသသည် ကဝန်ဆောင်မဟုမျာသအကဌောင်သ သိကဌပဌီသ ၎င်သတို့ထံမဟ ကုဒ်ကို ဒေါင်သလုဒ်လုပ်ခဌင်သ၊ တည်ဆောက်ခဌင်သနဟင့် တပ်ဆင်ခဌင်သမျာသ ပဌုလုပ်နိုင်သည်။ ၎င်သသည် ကောင်သမလန်သော်လည်သ၊ ဗာသရဟင်သပဌုလုပ်ခဌင်သတလင် အဓိက ချို့ယလင်သချက်တစ်ခု ရဟိနေပါသည်။ ဟုတ်ပါတယ်၊ Go tools ကိုသုံသပဌီသ github သို့မဟုတ် bitbucket ကဲ့သို့သော ဝန်ဆောင်မဟုမျာသမဟ အရင်သအမဌစ်ကုဒ်ကို သင်ရနိုင်သည်မဟာ မဟန်သော်လည်သ ဗာသရဟင်သကို သင်သတ်မဟတ်၍မရပါ။ အသုံသဝင်မဟုဖဌင့် ရိုသရိုသရဟင်သရဟင်သနေတတ်ပါသည်။ ထိုသို့သော ဆုံသဖဌတ်ချက်၏ ယုတ္တိကို ကျလန်ုပ် နာသမလည်နိုင်ပါ။

ကပဌဿနာအတလက် အဖဌေတစ်ခုအကဌောင်သ မေသခလန်သမျာသမေသပဌီသနောက် Go ဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့က ဖန်တီသခဲ့သည်။ ဖိုရမ်ချည်ဒီပဌဿနာကို ဘယ်လိုဖဌေရဟင်သကဌမလဲဆိုတာကို အကဌမ်သဖျင်သပဌောပဌထာသပါတယ်။ ၎င်သတို့၏ အကဌံပဌုချက်မဟာ သိုလဟောင်မဟုတစ်ခုလုံသကို သင်၏ပရောဂျက်တလင် တစ်ရက်တည်သ ကူသယူကာ ၎င်သကို “ပုံစံအတိုင်သ” ထာသရန်ဖဌစ်သည်။ သူတို့ဘာတလေတလေသနေတာလဲ။ Go ဖန်တီသသူမျာသသည် လျစ်လျူရဟုပဌီသ ရင်သမဌစ်ကုဒ်ကို ကူသယူရုံဖဌင့် ကဌီသမာသသော တဂ်နဟင့် ဗာသရဟင်သပံ့ပိုသမဟုဖဌင့် အံ့သဌဖလယ်ကောင်သသော ဗာသရဟင်သထိန်သချုပ်မဟုစနစ်မျာသရဟိသည်။

ရဟီမဟ ယဉ်ကျေသမဟုအိတ်

ကျလန်တော့်အမဌင်အရတော့ Go ကို တစ်သက်လုံသ C သုံသဖူသသူတလေနဲ့ အသစ်အဆန်သတလေကို မစမ်သချင်တဲ့သူတလေက ဖန်တီသခဲ့တာပါ။ ဘာသာစကာသကို အပိုဘီသမျာသဖဌင့် C အဖဌစ်ဖော်ပဌနိုင်သည်(orig: လေ့ကျင့်ရေသဘီသမျာသ) မျဉ်သပဌိုင်ဝါဒကို ပံ့ပိုသပေသရုံမဟတပါသ (စကာသအာသဖဌင့် အံ့သဌဖလယ်ကောင်သသည်) မဟလလဲ၍ ၎င်သတလင် စိတ်ကူသအသစ်မျာသ မရဟိပါ။ သင့်တလင် အသုံသမဝင်သလောက်၊ ခဌေဆလံ့သောဘာသာစကာသဖဌင့် ပဌိုင်တူလလန်ကဲမဟုရဟိသည်။

နောက်ထပ် ထိတ်လန့်စရာပဌဿနာမဟာ Go သည် လုပ်ထုံသလုပ်နည်သဘာသာစကာသ (C ၏ အသံတိတ်ထိတ်လန့်စရာကဲ့သို့) ဖဌစ်သည်။ ရဟေသရိုသဆန်ပဌီသ ခေတ်မမီသလိုခံစာသရသော လုပ်ထုံသလုပ်နည်သပုံစံဖဌင့် ကုဒ်ရေသခဌင်သကို အဆုံသသတ်ပါသည်။ Object Oriented Programming သည် ငလေရောင်ကျည်ဆန်မဟုတ်ကဌောင်သ သိပါသည်၊ သို့သော် အသေသစိတ်အချက်အလက်မျာသကို အမျိုသအစာသမျာသအဖဌစ် abstract လုပ်ပဌီသ encapsulation ပေသစလမ်သနိုင်ခဌင်သသည် ကောင်သပါတယ်။

ကိုယ့်အကျိုသအတလက် ရိုသရဟင်သတယ်။

Go ကို ရိုသရဟင်သစေရန် ဒီဇိုင်သထုတ်ထာသပဌီသ ထိုပန်သတိုင်တလင် အောင်မဌင်သည်။ အာသနည်သသော ပရိုဂရမ်မာမျာသအတလက် တမ်သပလိတ်အဖဌစ် ဘာသာစကာသဟောင်သကို အသုံသပဌု၍ ရေသသာသထာသသည်။ ၎င်သသည် ရိုသရဟင်သသောအရာမျာသကို လုပ်ဆောင်ရန် ရိုသရဟင်သသောကိရိယာမျာသဖဌင့် အပဌည့်အစုံပါရဟိသည်။ ၎င်သသည်ဖတ်ရန်လလယ်ကူပဌီသအသုံသပဌုရလလယ်ကူသည်။

၎င်သသည် စမတ်ကျသော ပရိုဂရမ်မာမျာသအတလက် အလလန်အမိုက်စာသ၊ အထင်ကဌီသလောက်စရာနဟင့် မကောင်သပါ။

СпасОбП mersinvald တည်သဖဌတ်မဟုမျာသအတလက်

source: www.habr.com

မဟတ်ချက် Add