Vivasoft-logo

Go বুটক্যাম্প

[১.১] পরিচিতি

আমাদের বুটক্যাম্পটি এমনভাবে সাজানো হয়েছে যাতে করে একটি প্রোগ্রামিং ল্যাংগুয়েজ হিসেবে Go এর সকল মৌলিক বিষয় সম্পর্কে সম্যক ধারণা অর্জন করা যায়। বুটক্যাম্পের গভীরে প্রবেশ করার ধাপে ধাপে আমরা Go এর মৌলিক এবং অনন্য বৈশিষ্ট্যগুলো সম্পর্কে ধারণা লাভ করব। সিনট্যাক্স, ডাটা টাইপ, কন্ট্রোল স্ট্রাকচার, ফাংশন, এরর হ্যান্ডেলিং এর মতো বিষয়গুলো ছাড়াও, এই যাত্রায় আমরা Go ব্যবহার করে ডাটাবেজের সাথে যোগাযোগ স্থাপন এবং রেস্টফুল এপিআই (RESTful API) এর সাথে পরিচিত হবো। প্রতি চ্যাপ্টারে সহায়ক হিসেবে থাকবে কিছু প্র্যাকটিস প্রব্লেম এবং ইন্টারভিউতে আসার মতো প্রশ্নাবলী। সর্বোপরি, আশা করা যায় এই বুটক্যাম্পটি ব্যাক-এন্ড ডেভেলপমেন্টে আগ্রহী যে কারো জন্য একটি ভালো সূচনা হবে। তাহলে আর দেরি না করে শুরু করা যাক…

[১.১.১] Go কি?

Go একটি স্ট্যাটিক্যালি টাইপড, ওপেন সোর্স, কম্পাইল্ড প্রোগ্রামিং ল্যাঙ্গুয়েজ। গতি, কার্যকারিতা এবং ব্যবহারগত দিক থেকে অধিক কার্যকারিতার জন্য পরিচিত। 

উপরের সংক্ষিপ্ত পরিচয় সহজবোধ্য না ও হতে পারে। তাই আরেকটু ভেঙে সংজ্ঞাটা বোঝানো যাক – 

  • প্রথমেই আসি “স্ট্যাটিক্যালি টাইপড” নিয়ে। স্ট্যাটিক্যালি টাইপড বলতে বোঝানো হচ্ছে যে, Go তে ব্যবহৃত সকল ভ্যারিয়েবলের ডাটা টাইপ রানটাইমের আগেই কম্পাইল টাইমে নির্ণয় হয়ে যায়। অর্থাৎ প্রোগ্রাম রান করার আগেই ডাটা টাইপ নির্ধারিত হয়ে যায়।
  • তারপর আসে, “ওপেন সোর্স”। ওপেন সোর্স বৈশিষ্ট্যের কারণে, যেকোনো কাজের জন্য প্রয়োজনীয় প্যাকেজ যে কেউ তৈরি করতে পারে এবং Go একটি প্যাকেজ বেইজড ল্যাংগুয়েজ হওয়ার দরুণ Go এর কমিউনিটি সাপোর্ট সরাসরি অনেক অবদান রাখতে পারে। 
  • “কম্পাইল্ড” বলতে বোঝায়, Go এর সকল কোড সরাসরি মেশিন কোডে রূপান্তর হয় এবং তা সরাসরি কম্পিউটারের প্রসেসরে রান করা যায়। এই বৈশিষ্ট্যের জন্য Go অন্যান্য ইন্টারপ্রেটেড ল্যাংগুয়েজ (JavaScript, Python) এর তুলনায় অধিক পার্ফরম্যান্সের অধিকারী।

[১.১.২] Go এর ব্যবহার

  • যেকোনো ওয়েব অ্যাপ্লিকেশন তৈরিতে, ওয়েব সার্ভার, APIs ছাড়াও বর্তমানের বহুল জনপ্রিয় মাইক্রোসার্ভিস আর্কিটেকচারের জন্য ।
  • সিস্টেম সফটওয়্যার, যেমনঃ অপারেটিং সিস্টেম, ডিভাইস ড্রাইভার, নেটওয়ার্ক প্রটোকলের জন্য। 
  • Go এর নিজস্ব কনকারেন্সি সাপোর্ট থাকায় ডিস্ট্রিবিউটেড সিস্টেম, ডাটা পাইপলাইনিং, স্ট্রিমিং অ্যাপ্লিকেশন বানানোর কাজে।
  • সার্ভার, প্রক্সি, লোড ব্যালেন্সারের মত নেটওয়ার্ক অ্যাপ্লিকেশনের জন্য। 
  • নানান DevOps ও ক্লাউড অ্যাপ্লিকেশনের জন্য। 

[১.১.৩] Go Install

আমাদের Go এর যাত্রা শুরু করতে IDE হিসেবে VS code কে বেছে নিচ্ছি, যেহেতু এটা সবথেকে বেশি ব্যবহৃত IDE গুলোর মধ্যে একটি এবং এটি ওপেন সোর্স।

প্লাটফর্ম অনুসারে Go ইন্সটল করার প্রসেস কিছুটা আলাদা। আপাতত আমরা শুধু Windows এ Go ইন্সটল করার গাইডলাইন প্রদান করছি।

Windows-এ Go ইন্সটল –

  • সর্বপ্রথম, এই লিংকে যেয়ে Windows এর জন্য  .msi  ফাইলটা ডাউনলোড করব।
  • ফাইলটা ডাউনলোড করা হয়ে গেলে, ওপেন করবো এবং prompt গুলো ফলো করবো-
Screenshot 1 Introduction
  • প্রথমে কিছুক্ষণ অপেক্ষা করার পর Next বাটনে ক্লিক করব।
Screenshot 2 Introduction
  • এরপর আবার Next বাটনে ক্লিক করব।   
Screenshot 3 Introduction
  • আমরা চাইলে আমাদের পছন্দের যেকোনো ডিরেক্টরি চয়েজ করতে পারি ,কিন্তু এখন ডিফল্ট ডিরেক্টরি হিসেবে যেটা রয়েছে আমরা সেটাই সিলেক্ট করব এবং আবারো Next বাটনে ক্লিক করব।       
Screenshot 5 Introduction
  • Install বাটনে ক্লিক করলে Windows administrative একটা পারমিশন চাইবে সেটাতে Yes বাটনে ক্লিক করবো।       
Screenshot 6 Introduction
  • ইন্সটল শেষ হলে আমরা Finish বাটনে ক্লিক করবো।       
Screenshot 7 Introduction
  • সঠিক মতো ইন্সটল হলো কিনা যাচাই করতে Command Promt ওপেন করি এবং go version এই কমান্ডটি রান করি  তাহলে আমরা  ছবিতে দেওয়া ঐ রকম কিছু দেখতে পাব। অভিনন্দন আপনাকে,  আপনার সিস্টেমে Go সফলভাবে ইন্সটল হয়ে গেছে।
লিনাক্সে Go ইন্সটল – 
  • সর্বপ্রথম, এই লিংকে যেয়ে লিনাক্সের বাইনারি রিলিজ ফাইলটা ডাউনলোড করব।
  • যদি আগে থেকে Go এর কোন ভার্সন সিস্টেমে ইন্সটল করা থাকে তাহলে নিচের কমান্ডটি রান করে তা সিস্টেম থেকে রিমুভ করে ফলতে হবে – 
				
					sudo rm -rf /usr/local/go
				
			
  • এরপর ডাউনলোড করা ফাইলটা /usr/local লোকেশনে এক্সট্র্যাক্ট করব –
				
					sudo tar -C /usr/local -xzf gox.x.x.linux-amd64.tar.gz

				
			
  • PATH এনভাইরনমেন্ট ভ্যারিয়েবলে /usr/local/Go/bin যোগ করব –
				
					export PATH=$PATH:/usr/local/go/bin
				
			
  • একবার লগ-আউট করে আবার লগইন করি।
  • টার্মিনাল খুলে নিচের কমান্ডটি রান করে যদি আমরা Go এর ভার্সন দেখতে পাই তাহলে বুঝবো আমাদের ইন্সটল প্রসেস ঠিকঠাক কমপ্লিট হয়েছে – 
				
					go version 
				
			
  • টার্মিনালের আউটপুট –
linux

[১.১.৪] Go তে প্রথম প্রোগ্রাম

কোনো একটা ল্যাংগুয়েজ শেখা শুরু করলে আমাদের প্রথম দায়িত্ব হচ্ছে কিছু ভালোমতো শেখার আগেই একটা প্রোগ্রাম রান করা, যেটা দিয়ে আমরা টার্মিনালে “Hello World!” আউটপুট প্রিন্ট করতে পারি। তাহলে আর দেরি না করে পালন করে ফেলি সেই গুরুদায়িত্ব –

  •  প্রথমেই একটি ডিরেক্টরি তৈরি করে সেটি  vs code দিয়ে ওপেন করি –
				
					> mkdir hello-world
> cd hello-world
> code . 
				
			
  • উপরের কাজটা আমরা ম্যানুয়ালি ও করতে পারতাম। সেক্ষেত্রে নতুন একটা ফোল্ডার বানিয়ে তা vs code এ ঢুকে খুলতে পারতাম। 
  • এবারে vs code থেকে hello-world ফোল্ডারের ভেতরে main.go নামে একটা ফাইল বানাই। 
  • এরপর main.go তে নিচের কোডটি কপি-পেস্ট করে ফেলি। কোড কিভাবে কাজ করছে তা আমরা এরপর ব্যাখ্যা করব – 

    main.go

				
					package main

   import "fmt"

   func main() {
       fmt.Println("Hello World!")
   }

				
			
  • যেকোনো Go প্রোগ্রামের এন্ট্রি পয়েন্ট হলো এর main() ফাংশন। অর্থাৎ একটা Go প্রোগ্রামে func main() থাকা টা আবশ্যক। 
  • main() ফাংশনের ভেতরে Println হচ্ছে fmt প্যাকেজের একটি ফাংশন। Go একটি প্যাকেজ বেজড ল্যাংগুয়েজ। এখানে যেহেতু আমরা fmt প্যাকেজটি ব্যবহার করেছি তাই আমাদের এটা ইমপোর্ট করতে হয়েছে। আর এই Println() ফাংশন ব্যবহার করেই আমরা টার্মিনালে “Hello World!” প্রিন্ট করব।
  • উপরের প্রোগ্রামটি রান করতে, আমরা টার্মিনাল থেকে নিচের কমান্ডটি রান করব – 
				
					go run main.go
				
			
  • এতে করে প্রোগ্রামটি একসাথে build এবং run হয়ে যাবে এবং টার্মিনালে আমরা “Hello World!” আউটপুট পেয়ে যাবো। 
  • যদি শুধু এক্সিকিউটেবল বাইনারি হিসেবে আমরা প্রোগ্রামটি সংরক্ষণ করতে চাই, সেক্ষেত্রে নিচের কমান্ডটি রান করতে হবে –
				
					go build main.go