Thursday, 31 July 2025

Go ভাষার String: অন্য ভাষার তুলনায় কেন এত আলাদা?

অন্যান্য প্রোগ্রামিং ভাষার তুলনায় Go-তে string টাইপ একটু আলাদা। কেন আলাদা, সেটা একটু পরে ব্যাখ্যা করব। তবে এটুকু নিঃসন্দেহে বলা যায়, যেমনভাবে Go-তে concurrency একটা বিশেষ দিক, তেমনি string handling ও একটা স্পেশাল জিনিস এবং এটা না বুঝলে অনেক ফাঁদে পড়ার আশঙ্কা থাকে।


আমি প্রায়ই বলি, Go তে প্রোগ্রামিং বা যেকোনো অ্যাপ বানাতে গেলে কিছু জিনিসে বাড়তি সচেতনতা জরুরি। এর মধ্যে সবচেয়ে গুরুত্বপূর্ণ হলো -

১. Memory Management
২. Shared Memory Access
৩. Concurrency & Scheduling

এসব বিষয় ভালোভাবে না বুঝলে race condition, deadlock কিংবা unexpected behavior খুব সহজেই ঘটতে পারে।


এখন আসল কথায় আসি Go এর string এত স্পেশাল কেন?

অনেক ভাষায় আমরা string থেকে সরাসরি index ব্যবহার করে ক্যারেক্টার বা সাবস্ট্রিং বের করতে পারি। কিন্তু Go-তে এই কাজটা একটু অন্যভাবে করতে হয়। কারণ:

  • Go-র string হল UTF-8 encoded byte sequence
  • এটি আসলে একটি immutable byte slice অর্থাৎ []byte
  • প্রতিটি index নির্দেশ করে একটি byte, একটি rune (character) নয়

অর্থাৎ, আপনি যখন str[0] লেখেন, তখন আপনি 'প্রথম অক্ষর' নয় বরং 'প্রথম বাইট' পাচ্ছেন।

উদাহরণ:

str := "সবুজ"
fmt.Println(str[0]) // এটা return করবে একটি byte (e.g., 224), 'স' নয়

বাংলা বা যেকোনো Unicode character অনেক সময় একাধিক byte নিয়ে তৈরি হয়। যেমন 'স' অক্ষরটি UTF-8-এ ৩টি byte নিয়ে গঠিত। সেক্ষেত্রে str[0] করলে আপনে শুধুই প্রথম byte পাবেন, পুরো অক্ষরটা নয়।


তাহলে Go তে কীভাবে কাজ করা উচিত?

আপনে যদি সত্যিকারের Unicode aware string traversal বা manipulation করতে চান, তাহলে rune ব্যবহার করতে হবে। যেমন:

for i, r := range str {
    fmt.Printf("Index %d: %c\n", i, r)
}

এখানে r হচ্ছে একেকটা Unicode character বা rune যা আসল ক্যারেক্টার ধরে।


তাহলে এটা সুবিধা না অসুবিধা?

আমার মতে, এটা Go এর একটি দারুণ সুবিধা। কারণ এই structure-এর জন্য multi-byte string handling অনেক সহজ এবং efficient হয়ে গেছে।
Go-এর compiler level UTF-8 support ও memory safety string নিয়ে কাজ করাকে খুবই predictable ও powerful করে তুলেছে যা অনেক ভাষার তুলনায় cleaner ও developer friendly।


Go-তে কাজ করতে গেলে এর memory architecture ও string behavior সম্পর্কে পরিপূর্ণ ধারণা থাকা খুব গুরুত্বপূর্ণ। নয়তো খুব সাধারণ মনে হওয়া কাজেও জটিলতা তৈরি হবে।

আজ এটুকুই। অন্যদিন Go এর encoding, rune বা memory layout নিয়ে আরও আলোচনা হবে।

No comments:

Post a Comment

Go ভাষার String: অন্য ভাষার তুলনায় কেন এত আলাদা?

অন্যান্য প্রোগ্রামিং ভাষার তুলনায় Go-তে string টাইপ একটু আলাদা। কেন আলাদা, সেটা একটু পরে ব্যাখ্যা করব। তবে এটুকু নিঃসন্দেহে বলা যায়, য...