ডেভসংকেত

গো

গো একটি স্ট্যাটিকালি টাইপ করা এবং সংকলিত প্রোগ্রামিং ল্যাঙ্গুয়েজ যেটি টেক জায়ান্ট গুগলের তিন জন প্রোগ্রামার ডিজাইন করেছে। গো ল্যাঙ্গুয়েজ সিনট্যাক্টিক্যালি সি ল্যাঙ্গুয়েজ এর সমান কিন্তু এর ম্যামরি সেফটি, আবর্জনা সংগ্রহ, কাঠামোগত টাইপিং এর দিক দিয়ে এটি অনেক ভালো পারফর্ম করে।

কন্ট্রিবিউটর

  • irezaul
  • raihaninfo
  • sabbirshawon
  • iamraufu
  • zubayerhimel

শেয়ার করুন

ফাইল ফরম্যাট

  • ফাইল এক্সটেনশন

    FileName.go
  • ফাইল রান করা

    go run FileName.go
  • এক্সেকিউটেবল ফাইল তৈরি করা

    go build FileName.go
  • এক্সেকিউটেবল ফাইল রান করা

    ./FileName
  • বিন ফোল্ডার এর মধ্যে ফাইল বিল্ড করা

    go install <package path>

ইউজার ডিফাইন্ড ডাটা টাইপ

  • ভিন্ন ভিন্ন বিল্ট ইন ডাটা টাইপের সমন্বয়ে নতুন ডাটা টাইপ তৈরি করা

    struct

ফাইল প্রিন্ট করা এবং ভ্যারিয়েবল ডিক্লেয়ার করা

  • নিচের লাইন ফাঁকা রেখে কিছু প্রিন্ট করা

    fmt.Println("hello world")
  • নিচের লাইন না ফাঁকা রেখে কিছু প্রিন্ট করা

    fmt.Print("hello world")
  • ইউজার এর থেকে ইনপুট নেয়া

    var name string 
     fmt.Scanln(&name)
  • স্ট্রিং ফরম্যাট করে প্রিন্ট করা

    var a = 10 fmt.Printf("%v", a)
  • ভ্যালু না দিয়ে ভ্যারিয়েবল ডিক্লেয়ার করা

    var a int
  • ভ্যালু দিয়ে ভ্যারিয়েবল ডিক্লেয়ার করা

    var a int = 10 / var a = 10
  • কোন ধরনের ডেটা টাইপ সেটা কম্পাইল টাইমে বুঝে নেয়া

    a := 10 / msg := "Hello there!!!"
  • ইন্টেজার ভ্যারিয়েবল ডিক্লেয়ার করা

    var a int = 20
  • ফ্ল্যোট ভ্যারিয়েবল ডিক্লেয়ার করা

    var b float32 = 23.30
  • স্ট্রিং ভ্যারিয়েবল ডিক্লেয়ার করা

    var b string = "Hello Programmer"
  • বুলিয়ান ভ্যারিয়েবল ডিক্লেয়ার করা

    var b bool = true
  • কন্সট্যান্ট ভ্যারিয়েবল ডিক্লেয়ার করা

    const Phi = 1.618

টাইপ কনভার্শন

  • ভ্যারিয়েবল এর টাইপ দেখা

    a := 45 
     fmt.Printf("%T", a) 
     // int
  • ইন্টিজারকে ফ্ল্যোট এ রূপান্তর করা

    var i int = 45 
     var j float 32 
     j = float32(i)
  • ফ্ল্যোট কে ইন্টিজার এ রূপান্তর করা

    var i float32 = 45.23 
     var j int 
     j = int(i)
  • ইন্টিজারকে স্ট্রিং এ রূপান্তর করা

    var i int = 45 
     var j float 32 
     j = strconv.Itoa(i)

ম্যাপ

  • একটি ফাঁকা ম্যাপ তৈরি করা

    population := map[string]int{}
  • বিল্ট ইন ম্যাপ ফাংশান দিয়ে ম্যাপ তৈরি করা

    population := make(map[string]int)
  • একটি ভ্যালু সহ ম্যাপ তৈরি করা

    population := map[string]int{
    	 "dhaka" : 3000323,
    	 "chattagram" : 2000353, 
    	 "sylhet" : 1005423, 
    	 "khulna" : 3000323, }
  • ম্যাপ এর কোন একটি ভ্যালু দেখা

    population["dhaka"] 
     // 3000323
  • ম্যাপ এ নতুন কোন ভ্যালু যোগ করা

    population["rajshahi"] = 1203839
  • ম্যাপ থেকে কোন ভ্যালু মুছে ফেলা

    delete(population, "dhaka")
  • ম্যাপ এর লেন্থ বের করা

    len(population)

স্ট্রাক্ট

  • type Doctor struct {
  •    number int
  • actorName string
  • }
  • aDoctor := Doctor {
  •    number: 3,
  • actorName: "Jon Pertwee",
  • }
  • fmt.Println(aDoctor)

ল্যাম্বদাস ( Lambdas )

  • myfunc := func() bool {
  • case 1: 
    	 fmt.Println("One"}
  • case 2: 
    	 fmt.Println("Two"}
  • default: 
    	 fmt.Println("none"}

লুপ

  • ফর লুপ

    for i:= 0; i < 10; i++ {
    	 fmt.Println(i) 
     }
  • লুপের বাইরে ভ্যারিয়েবল ইনিশিয়ালাইজ করে ফর লুপ তৈরি করা

    i := 0
     for ; i < 10; i++ { 
     fmt.Print(i) 
    }
  • এরের উপর ফর লুপ চালানো/ রেঞ্জ

    for k, v := range s {} 
    // এখানে k হচ্ছে key, v হচ্ছে value এবং s হচ্ছে এরের নাম
  • হোয়াইল এর মত ফর লুপ ব্যবহার করা

    for condition {}

পদ্ধতি ( Methods ) | রিসিভার ( Receivers )

  • type Devsonk struct {
  • X, Y float64
  • }
  • func (v Devsonk) Abs() float64 {
  • return math.Sqrt(v.X * v.X + v.Y * v.Y)
  • }
  • v := Devsonk{1, 2}
  • v.Abs()

ফরম্যাট স্ট্রিং

  • ডিফল্ট ফরম্যাট এ ভ্যালু দেখা

    %v
  • float ফরম্যাট এ ভ্যালু দেখা

    %.1f// এখানে 1 হচ্ছে ডিসিম্যাল পজিশন এর সংখ্যা
  • ভ্যারিয়েবল এর টাইপ দেখা

    %T
  • বুলিয়ান true false প্রিন্ট করা

    %t
  • ক্যারেক্টার প্রিন্ট করা

    %c
  • বেইজ ১০ এ ভ্যারিয়েবল প্রিন্ট করা

    %d
  • বেইজ ৮ এ ভ্যারিয়েবল প্রিন্ট করা

    %o
  • বেইজ ১৬ তে ছোট অক্ষর (a-f) এর ভ্যারিয়েবল প্রিন্ট করা

    %x
  • বেইজ ১৬ তে বড় অক্ষর (A-F) এর ভ্যারিয়েবল প্রিন্ট করা

    %X
  • স্ট্রিং এর সাথে নতুন লাইন যোগ করা

    \n

পিছিয়ে দেয়া ফাংশন | Deferring functions

  • use defer func | বিলম্বিত করা ফাংশন

    func main() {
     defer func() {
     fmt.Println(`Ready`)
     }()
     fmt.Println(`Working...`)
     }

ডাটা টাইপ

  • অক্ষর

    rune
  • পূর্ণসংখ্যা

    int/int32/int64
  • ফ্লোটিং পয়েন্ট সংখ্যা

    float/float32/float64
  • বুলিয়ান

    bool
  • স্ট্রিং

    string
  • পয়েন্টার টাইপ

    *type (যেকোনো ডাটা টাইপ, যেমন int, float, string)

ইনপুট নিয়ে কাজ করা

  • ইনপুট নিয়ে কাজ করার জন্য রিড ফাংশন ব্যবহার করা হয়

    fmt.Scan(&a)
  • একটি লাইন এর ইনপুট নিয়ে কাজ করার জন্য রিডলাইন ফাংশন ব্যবহার করা হয়

    fmt.Scanln(&a)
  • একাধিক লাইন এর ইনপুট নিয়ে কাজ করার জন্য রিডস্ট্রিং ফাংশন ব্যবহার করা হয়

    fmt.Scanf(&a)

ভার অথবা কন্সট্যান্ট ব্লক তৈরি করা

  • var (
  •    count int = 0
  •    msg string = "Hello"
  •    amount float32 = 45.6
  • )
  • const (
  •    count int = 0
  •    msg string = "Hello"
  •    amount float32 = 45.6
  • )

এরে

  • নতুন একটি এরে তৈরি করা

    numbers := [3]int{12, 32, 43}
  • এরে সাইজ ডিক্লেয়ার না করে এরে তৈরি করা

    grades := [...]int{23, 54, 33, 90]
  • ফাঁকা এরে তৈরি করা

    var students [3]string
  • এরের কোন ইনডেক্স এ ভ্যালু সেট করা

    students[0] = "John"
  • এরের সাইজ বের করা

    len(students)
  • বিল্ট-ইন ফাংশান দিয়ে এরে তৈরি করা এবং সব ভ্যালু শূন্য সেট করা

    a := make([]int, 3) 
     // [0 0 0]

ইফ এলস স্টেট্ম্যান্ট

  • ইফ এলস

    if condition {} else {}
  • ইফ এলস এর উদাহরণ

    if age < 18 {fmt.Println("You are underage."} else {"You are matured."}
  • ইফ এলস এলস ইফ এর উদাহরণ

    if age < 18 {fmt.Println("You are underage."} else if age == 18 {"You are good to go."} else {"You are over aged."}
  • বুলিয়ান ইফ স্টেট্ম্যান্ট

    if true {fmt.Println("This is true"} 
     // This is true
  • বুলিয়ান ইফ স্টেট্ম্যান্ট (2)

    if false {fmt.Println("This is true"} 
     // কিছু দেখাবে না। কারণ মিথ্যা হলে পরের লাইন এক্সেকিউট হয় না

সুইচ স্ট্যাট্ম্যান্ট

  • switch 2 {
  • return x > 10000
  • }

সময় অতিবাহিত কৌশল ( Time elapsed trick )

  • Utility

    func TrackTime(pre time.Time) time.Duration { 
     elapsed := time.Since(pre) 
     fmt.Println(`elapsed:`, elapsed) }
  • 'Time now'

    func TestTrackTime(t *testing.T) { 
     defer TrackTime(time.Now()) // <--- THIS 
     time.Sleep(500 * time.Millisecond) 
     }

ফাংশান

  • আর্গুমেন্ট ছাড়া কোন একটি ফাংশান তৈরি করা

    func message(){}
  • আর্গুমেন্ট সহ ফাংশান তৈরি করা

    func greeting(msg string, nmbr int){}
  • রিসিভার সহ ফাংশান তৈরি করা

    func (p Persion)greeting(msg string, nmbr int) string {}
  • বেনামি ফাংশান

    func () {}()

পয়েন্টার

  • একটি পয়েন্টার তৈরি করা

    a := 5 
     b := &a // পয়েন্টার এড্রেস তৈরি করতে ভ্যারিয়েবল এর আগে & চিহ্ন দেয়া লাগে
  • পয়েন্টার এড্রেস থেকে ভ্যালু নেয়া

    c := *b //
  • পয়েন্টার দিয়ে ভ্যারিয়েবল এর ভ্যালু পরিবর্তন করা

    a := 5 
     b := &a
     *b = 10

গোরুটিন এবং চ্যানেল

  • গোরুটাইন তৈরি করা

    go func() {
    	// কোড লিখতে হবে
    }()
  • চ্যানেল তৈরি করা

    ch := make(chan int)
  • চ্যানেল এ ভ্যালু পাঠান

    ch <- 5
  • চ্যানেল থেকে ভ্যালু নেয়া

    val := <- ch
  • চ্যানেল এর সাইজ নির্ধারণ করা

    ch := make(chan int, 5)

জেনারিক ফাংশন

  • জেনারিক ফাংশন তৈরি করা

    func genericFunc[T any](a T) T {
    	return a
    }
  • জেনারিক ফাংশন কল করা

    genericFunc[int](5)

ডেভসংকেত সম্পর্কে

ডেভসংকেত এর লক্ষ্য হচ্ছে বাংলাতে একটা বড় চিটশিটের ভান্ডার গড়ে তোলা। এটা সম্পূর্ণ স্বাধীন এবং ওপেন সোর্স গিটহাব অর্গানাইজেশন।

স্পন্সর