Go হল Google-এর তৈরি একটি কম্পাইলড প্রোগ্রামিং ভাষা, যা ২০০৯ সালে Robert Griesemer, Rob Pike এবং Ken Thompson তৈরি করেছিলেন। Go সিনট্যাক্সের সরলতাকে C-স্তরের পারফরম্যান্সের সাথে একত্রিত করে। মোবাইল ডেভেলপমেন্টে, Go সার্ভার অংশ, মাইক্রোসার্ভিস, API গেটওয়ে এবং CLI ইউটিলিটির জন্য ব্যবহৃত হয়। Stack Overflow Survey (2025) অনুসারে, Go শীর্ষ দশটি সর্বোচ্চ বেতনের প্রোগ্রামিং ভাষার মধ্যে একটি।
মূল পয়েন্ট
Go একটি স্ট্যাটিক্যালি টাইপড কম্পাইলড ভাষা যাতে গার্বেজ কালেকশনের মাধ্যমে স্বয়ংক্রিয় মেমরি ব্যবস্থাপনা রয়েছে। Go-র প্রধান লক্ষ্য: দ্রুত কম্পাইলেশন, কোডের সরলতা ও বিল্ট-ইন কনকারেন্সি সাপোর্ট। Go ভার্চুয়াল মেশিন ছাড়াই নেটিভ বাইনারিতে কম্পাইল হয় — একটি এক্সিকিউটেবল ফাইলে নির্ভরশীলতাসহ সবকিছু থাকে।
Go-র স্ট্যান্ডার্ড লাইব্রেরি HTTP সার্ভার, JSON মার্শালিং, কমান্ড-লাইন ফ্ল্যাগ পার্সিং, এনক্রিপশন ও ডাটাবেস অপারেশন কভার করে। HTTP সার্ভারের জন্য কোনো বাহ্যিক ফ্রেমওয়ার্কের প্রয়োজন নেই — net/http বিল্ট-ইন। Go Modules (v১.১৬ থেকে) মানক নির্ভরশীলতা ব্যবস্থাপনা সিস্টেম। বর্তমান সংস্করণ Go ১.২৩ (২০২৫) যাতে ইটারেটরের জন্য উন্নত iter প্যাকেজ রয়েছে।
Go Google-এর স্কেলিং সমস্যা সমাধানের জন্য ডিজাইন করা হয়েছিল: ধীর C++ কম্পাইলেশন, Java-র জটিলতা, অদক্ষ Python কনকারেন্সি। ফলাফল একটি ভাষা যা Docker, Kubernetes, Prometheus, Terraform ও Hugo চালায়।
Go ন্যূনতম: ২৫টি কীওয়ার্ড (C++-এ ৮৪টির তুলনায়)। কোনো ক্লাস, ইনহেরিট্যান্স, জেনেরিক্স (v১.১৮ পর্যন্ত), অপারেটর ওভারলোডিং বা এক্সেপশন নেই। ত্রুটিগুলি err রিটার্নের মাধ্যমে স্পষ্টভাবে হ্যান্ডল করা হয়। স্ট্রাক্ট ও ইন্টারফেস OOP-র পরিবর্তে ব্যবহৃত হয়।
package main
import (
"encoding/json"
"fmt"
"net/http"
)
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
}
func userHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
user := User{ID: 1, Name: "Alice", Email: "alice@example.com"}
json.NewEncoder(w).Encode(user)
}
func main() {
http.HandleFunc("/api/user", userHandler)
fmt.Println("Server on :8080")
http.ListenAndServe(":8080", nil)
}JSON ট্যাগ সহ User স্ট্রাক্ট সিরিয়ালাইজেশন নির্ধারণ করে। http.HandleFunc একটি হ্যান্ডলার রেজিস্টার করে। json.NewEncoder(w).Encode(user) সরাসরি রেসপন্সে স্ট্রাক্টকে JSON-এ সিরিয়ালাইজ করে। বিল্ট-ইন HTTP সার্ভার স্বয়ংক্রিয়ভাবে পৃথক গোরুটিনে অনুরোধ হ্যান্ডল করে।
Goroutines হল Go রানটাইম দ্বারা পরিচালিত হালকা এক্সিকিউশন থ্রেড। OS থ্রেডের (১–৮ MB স্ট্যাক) বিপরীতে, গোরুটিন ৪ KB স্ট্যাক দিয়ে শুরু হয় যা গতিশীলভাবে বাড়ে। একটি সার্ভারে ১,০০,০০০ গোরুটিন চালানো যায়। গোরুটিন শুরু করা — go functionName()।
চ্যানেল (channels) গোরুটিনের মধ্যে ডেটা স্থানান্তরের জন্য টাইপকৃত কিউ। চ্যানেল make(chan Type)-এর মাধ্যমে তৈরি করা হয়। <- অপারেটর ডেটা পাঠায়, <-chan গ্রহণ করে। চ্যানেল বাফারকৃত (ক্ষমতাসহ) বা আনবাফার্ড (সিঙ্ক্রোনাস) হতে পারে।
package main
import (
"fmt"
"net/http"
"time"
)
func fetchURL(url string, ch chan<- string) {
start := time.Now()
resp, err := http.Get(url)
if err != nil {
ch <- fmt.Sprintf("Error: %s", err)
return
}
defer resp.Body.Close()
elapsed := time.Since(start)
ch <- fmt.Sprintf("%s — %dms", url, elapsed.Milliseconds())
}
func main() {
urls := []string{"https://google.com", "https://github.com", "https://stackoverflow.com"}
ch := make(chan string, len(urls))
for _, url := range urls {
go fetchURL(url, ch)
}
for range urls {
fmt.Println(<-ch)
}
}তিনটি অনুরোধ go fetchURL-এর মাধ্যমে কনকারেন্টলি এক্সিকিউট হয়। ch চ্যানেল ফলাফল সংগ্রহ করে। defer resp.Body.Close() ফাংশন থেকে ফেরার সময় রেসপন্স বন্ধ নিশ্চিত করে। select {} ব্যবহার করা হয় না কারণ সব গোরুটিন চ্যানেলে পাঠায় — প্রধান গোরুটিন ঠিক len(urls) বার পড়ে।
Go মোবাইল অ্যাপ ব্যাকএন্ডের জন্য সেরা ভাষাগুলির মধ্যে একটি। বিল্ট-ইন HTTP/২ ও HTTP/৩, দ্রুত protobuf/gRPC সিরিয়ালাইজেশন ও কম মেমরি ফুটপ্রিন্ট Go-কে হাজার হাজার মোবাইল ক্লায়েন্টের সেবা দেওয়া API-র জন্য আদর্শ করে তোলে।
জনপ্রিয় ফ্রেমওয়ার্ক: Gin (Express.js-এর থেকে ১০x পর্যন্ত দ্রুত), Echo (সরল, JWT মিডলওয়্যার), Fiber (Express-শৈলী), Chi (net/http সামঞ্জস্যপূর্ণ)। Gin সবচেয়ে জনপ্রিয় যার GitHub-এ ৭০k+ স্টার রয়েছে। gRPC-র জন্য google.golang.org/grpc ব্যবহৃত হয়।
package main
import (
"database/sql"
"log"
"net/http"
"time"
"github.com/gin-gonic/gin"
_ "github.com/mattn/go-sqlite3"
)
func main() {
db, err := sql.Open("sqlite3", "mobile_app.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
r := gin.Default()
r.GET("/api/v1/posts", func(c *gin.Context) {
type Post struct {
ID int `json:"id"`
Title string `json:"title"`
CreatedAt time.Time `json:"created_at"`
}
rows, _ := db.Query("SELECT id, title, created_at FROM posts ORDER BY created_at DESC LIMIT 20")
defer rows.Close()
var posts []Post
for rows.Next() {
var p Post
rows.Scan(&p.ID, &p.Title, &p.CreatedAt)
posts = append(posts, p)
}
c.JSON(http.StatusOK, posts)
})
r.Run(":8080")
}Gin.GET একটি হ্যান্ডলারসহ রুট রেজিস্টার করে। sql.Open SQLite ডাটাবেস খোলে, db.Query কোয়েরি এক্সিকিউট করে। c.JSON posts স্লাইসকে JSON অ্যারেতে সিরিয়ালাইজ করে। GET-এর ভিতরের অ্যানোনিমাস ফাংশন বাইরের কনটেক্সট থেকে db ক্যাপচার করে। Gin প্যানিক হ্যান্ডল করে, অনুরোধ লগ করে ও মিডলওয়্যার সাপোর্ট করে।
Go মাইক্রোসার্ভিস আর্কিটেকচারের জন্য প্রাথমিক ভাষা। প্রতি মাইক্রোসার্ভিসে কম মেমরি খরচ (১৫–৩০ MB) একটি সার্ভারে ডজনখানেক সার্ভিস চালানোর অনুমতি দেয়। দ্রুত স্টার্টআপ (মিলিসেকেন্ড) ও ছোট বাইনারি আকার (১০–২০ MB) কন্টেইনার ডিপ্লয়মেন্ট সহজ করে।
Go-তে API গেটওয়ে মোবাইল অ্যাপ থেকে অভ্যন্তরীণ সার্ভিসে অনুরোধ একত্রিত করে। Go গেটওয়ে অথেন্টিকেশন (JWT), রেট লিমিটিং, রাউটিং ও ক্যাশিং হ্যান্ডল করে। জনপ্রিয় বাস্তবায়ন: Kong (Go প্লাগইনসহ OpenResty-ভিত্তিক), Tyk (Go-তে), Gin-এ কাস্টম গেটওয়ে।
gRPC হল Google-এর রিমোট প্রোসিজিওর কল ফ্রেমওয়ার্ক যা সিরিয়ালাইজেশনের জন্য Protocol Buffers ও ট্রান্সপোর্টের জন্য HTTP/২ ব্যবহার করে। সব ভাষার মধ্যে Go-র gRPC সাপোর্ট সেরা। মোবাইল ব্যাকএন্ডের জন্য, gRPC REST/JSON-এর তুলনায় ৫–১০ গুণ বেশি থ্রুপুট প্রদান করে।
package main
import (
"context"
"log"
"net"
"google.golang.org/grpc"
pb "example.com/proto"
)
type server struct {
pb.UnimplementedUserServiceServer
}
func (s *server) GetUser(ctx context.Context, req *pb.GetUserRequest) (*pb.UserResponse, error) {
return &pb.UserResponse{
Id: req.Id,
Name: "Alice",
Email: "alice@example.com",
}, nil
}
func main() {
lis, _ := net.Listen("tcp", ":50051")
s := grpc.NewServer()
pb.RegisterUserServiceServer(s, &server{})
log.Fatal(s.Serve(lis))
}pb.UnimplementedUserServiceServer হল .proto ফাইল থেকে protoc-উৎপন্ন স্টাব। server স্ট্রাক্ট GetUser মেথড ওভাররাইড করে। grpc.NewServer() লগিং, অথেন্টিকেশন ও মেট্রিক্সের জন্য ইন্টারসেপ্টরসহ সার্ভার তৈরি করে।
Go মোবাইল ডেভেলপমেন্টে ব্যবহৃত CLI ইউটিলিটির জন্য সেরা ভাষা। নির্ভরশীলতাহীন একক স্ট্যাটিক বাইনারি (~১০ MB) সব প্ল্যাটফর্মে চলে: macOS, Linux, Windows। কম্পাইলেশন সেকেন্ড সময় নেয়। Go ইউটিলিটির জন্য ইন্টারপ্রেটার বা রানটাইম ইনস্টলেশনের প্রয়োজন নেই।
মোবাইল ইকোসিস্টেমে Go টুলের উদাহরণ: Migrate (DB মাইগ্রেশন), Kubectl (মোবাইল ব্যাকএন্ডের জন্য Kubernetes), Terraform (ইনফ্রাস্ট্রাকচার), Prometheus (মনিটরিং)। ডেভেলপাররা Go ইউটিলিটি লেখেন প্রোটো ফাইল থেকে মডেল জেনারেট, কনফিগারেশন ভ্যালিডেট ও মাইক্রোসার্ভিস ডিপ্লয় করার জন্য।
package main
import (
"flag"
"fmt"
"os"
)
func main() {
project := flag.String("project", "", "Project directory")
version := flag.String("version", "1.0.0", "App version")
verbose := flag.Bool("verbose", false, "Verbose output")
flag.Parse()
if *project == "" {
fmt.Println("Usage: deploy --project=path [--version=x.x.x]")
os.Exit(1)
}
if *verbose {
fmt.Printf("Deploying project %s version %s\n", *project, *version)
}
// এখানে ডিপ্লয় লজিক
fmt.Println("Deploy complete")
}flag.String নাম, ডিফল্ট মান ও বিবরণসহ একটি স্ট্রিং কমান্ড-লাইন ফ্ল্যাগ নির্ধারণ করে। flag.Parse() os.Args আর্গুমেন্ট পার্স করে। পয়েন্টার *project মান পাওয়ার জন্য ডিরেফারেন্স করা হয়। বাইনারি go build -o deploy deploy.go কমান্ড দিয়ে তৈরি করা হয়।
Gomobile হল Google-এর একটি টুল যা Go কোডকে নেটিভ মোবাইল লাইব্রেরিতে কম্পাইল করে। go bind -target=android Android-এর জন্য .aar জেনারেট করে, go bind -target=ios iOS-এর জন্য .xcframework জেনারেট করে। এটি Go-তে সাধারণ বিজনেস লজিক লিখে Kotlin ও Swift থেকে কল করার অনুমতি দেয়।
Gomobile-এর প্রধান ব্যবহার: ক্রিপ্টোগ্রাফি (কাস্টম এনক্রিপশন স্কিম), নেটওয়ার্কিং (কাস্টম WebSocket প্রোটোকল), ডেটা প্রসেসিং (কম্প্রেশন, এনকোডিং, পার্সিং)। UI Go-তে লেখা হয় না — এর উদ্দেশ্য ক্রস-প্ল্যাটফর্ম নেটিভ মডিউলের জন্য C++ প্রতিস্থাপন করা।
package mobile
import "crypto/aes"
// EncryptData AES-256-GCM দিয়ে ডেটা এনক্রিপ্ট করে (.aar-এ এক্সপোর্ট)
func EncryptData(key []byte, plaintext []byte) ([]byte, error) {
block, err := aes.NewCipher(key)
if err != nil {
return nil, err
}
ciphertext := make([]byte, len(plaintext))
block.Encrypt(ciphertext, plaintext)
return ciphertext, nil
}
func DecryptData(key []byte, ciphertext []byte) ([]byte, error) {
block, err := aes.NewCipher(key)
if err != nil {
return nil, err
}
plaintext := make([]byte, len(ciphertext))
block.Decrypt(plaintext, ciphertext)
return plaintext, nil
}এক্সপোর্টেড ফাংশন (বড় হাতের) Gomobile Java/Swift ইন্টারফেসে মোড়ানো হয়। Kotlin থেকে, কলটি Mobile.encryptData(key, plaintext) এর মতো দেখায়। Gomobile স্বয়ংক্রিয়ভাবে টাইপ কনভার্ট করে: []byte → byte[] (Java) / Data (Swift)।
| কমান্ড | ফলাফল | প্ল্যাটফর্ম |
|---|---|---|
| gomobile bind -target=android | .aar লাইব্রেরি | Android |
| gomobile bind -target=ios | .xcframework | iOS |
| gomobile build -target=android | Go অ্যাক্টিভিটি সহ .apk | Android |
Go সার্ভার ডেভেলপমেন্টে Java ও Kotlin-এর সাথে প্রতিযোগিতা করে। মূল পার্থক্য: Go নেটিভ বাইনারিতে কম্পাইল হয়, JVM-এর প্রয়োজন নেই, ২–৩ গুণ কম মেমরি খরচ করে ও মিলিসেকেন্ডে শুরু হয়। Java ইকোসিস্টেম পরিপক্কতা ও লাইব্রেরির সংখ্যায় এগিয়ে।
| মানদণ্ড | Go | Java / Kotlin |
|---|---|---|
| কম্পাইলেশন | নেটিভ বাইনারি (~১০ MB) | JVM বাইটকোড + JIT |
| স্টার্টআপ | ১–৫ মিলিসেকেন্ড | ১–৫ সেকেন্ড (JVM স্টার্টআপ) |
| RAM খরচ | ১৫–৩০ MB প্রতি সার্ভিস | ৫০–২০০ MB প্রতি সার্ভিস |
| কনকারেন্সি | Goroutines (বিল্ট-ইন) | করুটিন / RxJava |
| ইকোসিস্টেম | বাড়ছে, ১০০k+ রিপোজিটরি | পরিপক্ক, লক্ষাধিক লাইব্রেরি |
| শেখা | ২–৪ সপ্তাহ | ৬–১২ মাস (Java) |
Go বেছে নেওয়া হয় মাইক্রোসার্ভিস, API গেটওয়ে ও টুলের জন্য। Java/Kotlin — সমৃদ্ধ বিজনেস লজিকযুক্ত এন্টারপ্রাইজ অ্যাপের জন্য। মোবাইল ডেভেলপমেন্টে, সর্বোত্তম সমন্বয়: ব্যাকএন্ডের জন্য Go, ক্লায়েন্টের জন্য Kotlin/Swift।
সচরাচর জিজ্ঞাসিত প্রশ্ন
Go JVM ছাড়াই একক স্ট্যাটিক বাইনারিতে কম্পাইল হয়, কম মেমরি খরচ করে ও দ্রুত শুরু হয়। গোরুটিনের মাধ্যমে অ্যাসিঙ্ক্রোনাসি RxJava বা Kotlin করুটিনের চেয়ে সহজ। মাইক্রোসার্ভিসের জন্য, Go-কে এর সরলতা ও পারফরম্যান্সের জন্য বেছে নেওয়া হয়।
সবচেয়ে জনপ্রিয়: Gin (উচ্চক্ষমতা), Echo (সরল), Fiber (Express.js-শৈলী), Chi (হালকা ও সামঞ্জস্যপূর্ণ)। রিয়েল-টাইমের জন্য WebSocket Gorilla বা Melody ব্যবহার করা হয়। gRPC-র জন্য — google.golang.org/grpc।
হ্যাঁ, Gomobile-এর মাধ্যমে Go-কে .aar (Android) ও .xcframework (iOS)-এ কম্পাইল করা সম্ভব। তবে UI Go-তে লেখা হয় না — সীমিত ইকোসিস্টেমের কারণে এটি ব্যবহারিক নয়। Go নেটিভ লাইব্রেরি, ক্রিপ্টোগ্রাফি ও নেটওয়ার্কিংয়ের জন্য কার্যকর।
হ্যাঁ, Go উচ্চ-লোড সিস্টেমের জন্য ডিজাইন করা হয়েছিল। Cloudflare, Uber, Twitch, Dropbox-এর মতো কোম্পানিগুলি প্রোডাকশনে Go ব্যবহার করে। বিল্ট-ইন গোরুটিন শিডিউলার একটি সার্ভারে লক্ষাধিক কনকারেন্ট টাস্ক হ্যান্ডল করে।
Go Java-র চেয়ে সহজ — এতে কোনো ক্লাস, ইনহেরিট্যান্স বা এক্সেপশন নেই। সিনট্যাক্স ন্যূনতম, স্ট্রাক্ট ও ইন্টারফেস OOP-র পরিবর্তে ব্যবহৃত হয়। বেশিরভাগ ডেভেলপার ২–৪ সপ্তাহে Go শিখে ফেলে।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।