Go হল একটি সমসাময়িক, কম্পাইল করা প্রোগ্রামিং ভাষা যা সি সিনট্যাক্স দ্বারা অনুপ্রাণিত স্ট্যাটিক টাইপিং সহ।
গো ১.২১ সংস্করণের ছয় মাস পর এর নতুন সংস্করণ ১.২২ এসেছে, যেখানে টুলসেট, রানটাইম, অপটিমাইজেশনের উন্নতি, কম্পাইলারের উন্নয়ন এবং লাইব্রেরিতে বেশ কিছু উল্লেখযোগ্য পরিবর্তন আনা হয়েছে।
যারা Go-এর সাথে পরিচিত নন, তাদের জন্য উল্লেখ করা প্রয়োজন যে, এটি গুগল কর্তৃক কমিউনিটির অংশগ্রহণে তৈরি একটি প্রোগ্রামিং ভাষা। এটি একটি হাইব্রিড সমাধান যা কম্পাইলড ভাষার উচ্চ পারফরম্যান্সের সাথে স্ক্রিপ্টিং ভাষার মতো সুবিধাগুলোকে একত্রিত করে, যেমন—কোড লেখার সহজতা, উন্নয়নের গতি এবং ত্রুটি সুরক্ষা।
1.22 প্রধান খবর যান
Go 1.22 থেকে চালু হওয়া এই নতুন সংস্করণে, "for" লুপের দুটি পরিবর্তন বিশেষভাবে উল্লেখযোগ্য । পূর্বে, "for" লুপ দ্বারা ঘোষিত ভেরিয়েবলগুলো একবার তৈরি হতো এবং প্রতিটি ইটারেশনে আপডেট করা হতো। Go 1.22-এ, অনিচ্ছাকৃত শেয়ারিং ত্রুটি (adintident sharing errors) প্রতিরোধ করার জন্য লুপের প্রতিটি ইটারেশন নতুন ভেরিয়েবল তৈরি করে । এছাড়াও, "for" লুপে রেঞ্জ ফাংশনের জন্য পরীক্ষামূলক সাপোর্ট (GOEXPERIMENT=rangefunc) যোগ করা হয়েছে, যা একটি ফাংশনকে ইটারেটর হিসেবে নির্দিষ্ট করার সুযোগ দেয়। "for" লুপের একটি দীর্ঘদিনের সমস্যা, যার কারণে কো-রুটিন কলগুলো ইটারেশনের মধ্যে লুপ ভেরিয়েবল শেয়ার করত, সেটিরও সমাধান করা হয়েছে । অধিকন্তু, "for" লুপ এখন ইন্টিজারের উপরও ইটারেট করতে পারে। উদাহরণস্বরূপ:
প্যাকেজ প্রধান আমদানি "fmt" func main() { i এর জন্য := রেঞ্জ 10 { fmt.Println(10 - i) } fmt.Println("go1.22 টেক অফ!") }
এই নতুন সংস্করণের আরেকটি উল্লেখযোগ্য পরিবর্তন হলো " vendor " ডিরেক্টরি ব্যবহারের সুবিধার সংযোজন, যেখানে ওয়ার্কস্পেসের নির্ভরতাগুলো থাকে। কমান্ডগুলো এখন এই ডিরেক্টরিটি ব্যবহার করতে পারে, যা ` go work vendor` দিয়ে তৈরি করা হয় এবং বিল্ড কমান্ডে ব্যবহৃত হয় যখন ` -mod` বিকল্পটি " vendor "- এ সেট করা থাকে, যা ওয়ার্কস্পেসে একটি " vendor " ডিরেক্টরি থাকলে ডিফল্ট হিসেবে সেট করা থাকে।
এটা মনে রাখা গুরুত্বপূর্ণ যে, লিগ্যাসি GOPATH মোডে কোনো মডিউলের বাইরে ` go get` ফাংশনালিটি আর সমর্থিত নয় । তবে, `go build` এবং `go test`- এর মতো অন্যান্য বিল্ড কমান্ডগুলো লিগ্যাসি GOPATH প্রোগ্রামগুলোর জন্য অনির্দিষ্টকালের জন্য কাজ করতে থাকবে। এছাড়াও, `go mod init` কমান্ডটি অন্য ভেন্ডর টুলের কনফিগারেশন ফাইল (যেমন Gopkg.lock) থেকে মডিউলের রিকোয়ারমেন্টগুলো ইম্পোর্ট করার চেষ্টা আর করবে না ।
Go 1.22-এ io/unsafe নামে একটি নতুন প্যাকেজ চালু করা হয়েছে , যা পয়েন্টার এবং আনসেফ মেমরি নিয়ে কাজ করার জন্য বিভিন্ন কার্যকারিতা প্রদান করে । এই প্যাকেজটিতে পয়েন্টারকে সেফ থেকে আনসেফ টাইপে রূপান্তর করার পাশাপাশি বাউন্ড চেক না করেই মেমরি কপি অপারেশন করার জন্য মেথড রয়েছে।
পিজিও কোড প্রোফাইলিং- এর ফলাফলের উপর ভিত্তি করে কম্পাইলার অপটিমাইজেশন অন্তর্ভুক্ত করার কাজ অব্যাহত ছিল । কম্পাইলার এখন বিভিন্ন মেথড থেকে আসা ইনডাইরেক্ট কলগুলোকে এক্সপান্ডেড ইনলাইন ব্লকের এক্সিকিউশন দ্বারা প্রতিস্থাপন করতে ডিভারচুয়ালাইজেশন টুল ব্যবহার করে । পিজিও সক্রিয় করা হলে, এই পরিবর্তনটি বেশিরভাগ প্রোগ্রামের পারফরম্যান্স ২% থেকে ১৪% পর্যন্ত উন্নত করেছিল।
Go-এর উইন্ডোজ সংস্করণে , যে প্রোগ্রামগুলো -buildmode=c-archive বা -buildmode=c-shared দিয়ে তৈরি Go লাইব্রেরি লিঙ্ক করে বা লোড করে , সেগুলো এখন নতুন runtime/trace এবং tracehook প্যাকেজগুলোর মাধ্যমে উইন্ডোজ ইভেন্ট লগিং (ETW) API ব্যবহার করতে পারে , যা একটি ETW প্রোভাইডার হিসেবে Go ইভেন্ট ট্রেস সংগ্রহ প্রোটোকল বাস্তবায়ন করে।
অন্যান্য পরিবর্তনগুলির মধ্যে যেগুলি দাঁড়িয়ে আছে:
- কমান্ড পরীক্ষা-কভার যান এখন কভার প্যাকেজের জন্য কভারেজ সারাংশ প্রিন্ট করে যেগুলির নিজস্ব পরীক্ষা ফাইল নেই।
- os/exec, প্রসঙ্গ বৈশিষ্ট্যগুলি সংজ্ঞায়িত করার ক্ষমতা যোগ করা হয়েছে, যা আপনাকে কার্যকরী ডিরেক্টরি, পরিবেশ ভেরিয়েবল এবং কার্যকর করা কমান্ডের জন্য ইনপুট/আউটপুট ফাইল বর্ণনাকারীর মতো মান সেট করতে দেয়।
- রানটাইমে অপ্টিমাইজ করা মেমরি ম্যানেজমেন্ট, যার ফলে বেশিরভাগ অ্যাপ্লিকেশনের জন্য 1-3% কর্মক্ষমতা বৃদ্ধি এবং 1% মেমরি খরচ হ্রাস পায়।
- প্যাকেজ নেট/http, ফাংশন যোগ করা হয়েছে IdleConnections বন্ধ করুন HTTP ক্লায়েন্টে, যা ক্লায়েন্ট সম্প্রতি ব্যবহার করা সমস্ত নিষ্ক্রিয় সংযোগ বন্ধ করে দেয়
- কল সন্নিবেশ পদ্ধতির একটি উন্নত পরীক্ষামূলক বাস্তবায়ন (GOEXPERIMENT=newinliner) কম্পাইলারে যোগ করা হয়েছে, যা গুরুত্বপূর্ণ অপারেশনগুলিকে অ-গুরুত্বপূর্ণ থেকে আলাদা করতে হিউরিস্টিক ব্যবহার করে।
- প্যাকেজ যোগ করা হয়েছে » math/rand/v2 » স্ট্যান্ডার্ড লাইব্রেরিতে, যা একটি আরও সামঞ্জস্যপূর্ণ API অফার করে এবং সিউডোর্যান্ডম নম্বর তৈরি করতে দ্রুত অ্যালগরিদম ব্যবহার করে।
- প্যাকেজ net/http.ServeMux টেমপ্লেটগুলিতে পদ্ধতি এবং মুখোশগুলি নির্দিষ্ট করার ক্ষমতা যুক্ত করা হয়েছে।
অবশেষে, আপনি যদি আরও জানতে আগ্রহী হন, তাহলে নিচের লিঙ্কে বিস্তারিত তথ্য পেয়ে যাবেন ।