Go (Golang) در ۱۶ سال گذشته از یک پروژه داخلی گوگل به زبان اصلی توسعه cloud-native تبدیل شده است. امروز ۶۹ درصد پروژههای CNCF با گو نوشته شدهاند، شرکتهایی مثل Uber بیش از ۵۰ میلیون خط کد گولنگ در production دارند، و زبان به رتبه ۷ در ایندکس TIOBE رسیده - بالاترین رتبه تاریخ خودش. Docker، Kubernetes، Terraform، Prometheus و صدها ابزار کلیدی دیگه همگی با Go ساخته شدن.
این موفقیت ریشه در طراحی اصلی Go داره: سادگی Python با سرعت C، به علاوه مدل concurrency قدرتمند و compile به یک binary بدون dependency. وقتی شرکتها برای scale کردن به microservices و container ها روی آوردن، Go دقیقاً ابزاری بود که نیاز داشتن.
تاریخ Go از ۲۱ سپتامبر ۲۰۰۷ شروع شد - یک جلسه در اتاق کنفرانس Yaounde ساختمان ۴۳ گوگل، جایی که Robert Griesemer، Rob Pike و Ken Thompson تصمیم گرفتن زبانی طراحی کنن که مشکلات C++ در مقیاس گوگل رو حل کنه. مشکل اصلی؟ زمان compile فوقالعاده بالا و پیچیدگی غیرضروری C++، به علاوه عدم پشتیبانی خوب از پردازندههای چندهستهای.
بعد از دو سال توسعه، ۱۰ نوامبر ۲۰۰۹ Go به صورت open source منتشر شد. جالبه که فقط با دو ماه حضور در سال ۲۰۰۹، Go عنوان “Programming Language of the Year” رو از TIOBE گرفت. اسم “Go” خیلی ساده انتخاب شد - کوتاه و راحت برای تایپ کردن - اما چون go.com متعلق به Disney بود، golang.org رو برای وبسایت استفاده کردن.
Go 1.0 در مارس ۲۰۱۲ نقطه عطف اصلی بود - اولین نسخه production-ready با یک تعهد اساسی: Go 1 compatibility promise. این یعنی کدی که برای Go 1.0 نوشته شده همیشه با نسخههای بعدی کار میکنه. این تعهد به backward compatibility یکی از دلایل اصلی اعتماد enterprise ها به Go شد.
Go 1.5 در آگوست ۲۰۱۵ یک تحول عظیم بود: تمام toolchain از C به Go بازنویسی شد (self-hosting/bootstrapping). مهمتر از اون، concurrent garbage collector معرفی شد که pause time ها رو از ۳۰۰-۴۰۰ میلیثانیه به ۳۰-۴۰ میلیثانیه کاهش داد - یک بهبود ۱۰ برابری که برای سیستمهای real-time حیاتی بود. GOMAXPROCS هم از پیشفرض ۱ به تعداد core های موجود تغییر کرد.
تکامل garbage collector ادامه پیدا کرد و تا Go 1.8 در ۲۰۱۷، pause time ها به زیر یک میلیثانیه رسیدن. برای مقایسه، Twitch گزارش کرد که بین Go 1.4 و 1.6، بهبود ۳۰ برابری در GC pause time ها دیدن - از چند ثانیه به کمتر از ۷۰ میلیثانیه.
Go 1.11 در آگوست ۲۰۱۸ Go Modules رو به صورت experimental معرفی کرد - یک سیستم مدیریت dependency با versioning و package distribution یکپارچه. این پایان دوران GOPATH بود، جایی که developer ها مجبور بودن همه کد رو داخل یک دایرکتوری خاص نگه دارن.
transition تدریجی بود: Go 1.13 modules رو در بیشتر سناریوها پیشفرض کرد، و تا Go 1.16 در فوریه ۲۰۲۱، modules به صورت کامل الزامی شد و GOPATH mode منسوخ شد. تا اواخر ۲۰۲۰، ۹۶ درصد پروژهها modules رو adopt کرده بودن.
Go 1.18 در مارس ۲۰۲۲ بزرگترین تغییر زبان از Go 1.0 رو آورد: Generics. بعد از سیزده سال بحث و طراحیهای مختلف (از ۲۰۱۱ تا ۲۰۲۲)، type parameters با سینتکس bracket معرفی شدن. این یکی از خواستههای اصلی community بود، اما تیم Go خیلی محتاط بود تا طراحی درستی ارائه بده که با فلسفه سادگی Go سازگار باشه.
Go 1.18 همچنین fuzzing support رو به testing framework اضافه کرد و register-based calling convention رو به معماریهای غیر x86 گسترش داد. این calling convention که در Go 1.17 معرفی شده بود، ۵ تا ۱۵ درصد بهبود performance رو به ارمغان آورد.
Go 1.21 در آگوست ۲۰۲۳ Profile-Guided Optimization (PGO) رو به صورت general availability عرضه کرد - با یک فایل default.pgo میتونین ۲ تا ۷ درصد بهبود performance بگیرین. همچنین built-in function های min، max و clear و package های مهم slog (structured logging)، maps و slices با توابع generic اضافه شدن.
Go 1.22 در فوریه ۲۰۲۴ یک gotcha قدیمی رو حل کرد: semantics حلقه for-range تغییر کرد به طوری که متغیرهای loop برای هر iteration جداگانه ساخته میشن. همچنین math/rand/v2 - اولین package v2 در standard library - معرفی شد.
Go 1.23 در آگوست ۲۰۲۴ iterator functions رو آورد با package جدید iter، و Go 1.24 در فوریه ۲۰۲۵ مکانیزمهای FIPS 140-3 compliance برای صنایع regulated معرفی کرد. جدیدترین نسخه، Go 1.25 در آگوست ۲۰۲۵، Green Tea garbage collector رو به صورت experimental اضافه کرد که ۱۰ تا ۴۰ درصد overhead GC رو کاهش میده، همچنین encoding/json/v2 برای بهبود performance و package testing/synctest برای تست کد concurrent با fake clock.
بنیانگذاران Go سه نفر از اساطیر علوم کامپیوتر بودن: Ken Thompson (خالق Unix و زبان B و UTF-8)، Rob Pike (عضو تیم Unix در Bell Labs، خالق Plan 9 و Inferno)، و Robert Griesemer (شاگرد خالق Pascal با ۱۵ سال تجربه C++). بعداً Ian Lance Taylor با ایجاد مستقل gccgo frontend و Russ Cox به تیم اضافه شدن.
امروز با بازنشستگی Pike و Thompson، Russ Cox رهبری فنی پروژه رو بر عهده داره و به همراه Griesemer و Taylor روی feature های جدید مثل generics کار میکنن. تیم Go در گوگل همچنان توسعه رو هدایت میکنه، اما با هزاران contributor از community open source.
به مناسبت شانزدهمین سالگرد زبان Go، یک هدیه ویژه برای شما آماده کردیم!
اگه میخوای همین امروز یادگیری Go و Backend Development رو شروع کنی، با استفاده از کد تخفیف ویژه میتونی تا ۲ میلیون تومان تخفیف دریافت کنی.
شما هم میتونی به جمع بیش از ۱۰۰۰ شرکتکننده بپیوندی که برای یادگیری گولنگ GoCasts رو انتخاب کردن.
یکی از بزرگترین موفقیتهای Go ساختن ابزارهای infrastructure است که امروز اساس cloud computing محسوب میشن. ۶۹ درصد پروژههای CNCF با Go نوشته شدن - یک تسلط مطلق که هیچ زبان دیگهای نداره. Python با فقط ۵ درصد در رتبه دوم قرار داره.
Docker - پلتفرمی که containerization رو متحول کرد - کاملاً با Go نوشته شده. دلیلش؟ static compilation بدون dependency، پشتیبانی cross-platform، concurrency قدرتمند برای مدیریت container ها، و standard library عالی. Docker امروز بیش از ۷۰ هزار ستاره در GitHub داره و foundation technology برای DevOps مدرن شده.
Kubernetes - سیستم container orchestration که de facto standard شده - هم کاملاً با Go نوشته شده و با بیش از ۱۱۰ هزار ستاره GitHub محبوبترین پروژه infrastructure است. Kubernetes امروز زیرساخت گوگل، مایکروسافت، AWS و تقریباً تمام شرکتهای بزرگ فناوری رو power میکنه. انتخاب Go برای Kubernetes به خاطر نیازهای performance، مدل concurrency برای مدیریت cluster ها، کتابخانههای قدرتمند networking، و توانایی compile برای معماریهای مختلف بود.
Terraform با ۴۲ هزار ستاره GitHub، استاندارد صنعت برای Infrastructure as Code (IaC) شده. Consul (۲۸ هزار ستاره) یک راهحل service mesh و service discovery عالی است، و Vault (۳۱ هزار ستاره) برای secrets management استفاده میشه. هر سه با Go نوشته شدن و دلیل انتخاب Go شامل cross-platform compilation، معماری plugin، type safety و performance بود.
Prometheus با ۵۴ هزار ستاره، یک graduated CNCF project و de facto standard برای monitoring در Kubernetes است. این یک time-series database و سیستم monitoring با performance بالا برای جمعآوری metric هاست. Jaeger برای distributed tracing، Thanos برای highly available Prometheus، و Telegraf (۱۴ هزار ستاره) برای metrics collection همه با Go نوشته شدن.
CockroachDB (۳۰ هزار ستاره) یک distributed SQL database با سازگاری PostgreSQL است که برای سیستمهای mission-critical طراحی شده. تیم CockroachDB توضیح دادن: “وقتی یک distributed system با performance بالا میسازین، فقط چند زبان دارین - C++، Java و Go در صدر لیست قرار دارن.” Go رو انتخاب کردن چون automatic memory management بدون پیچیدگی C++ داره، GC قابل تنظیمه، و concurrency primitive های قوی برای coordination توزیعشده داره. حدود ۹۰ درصد CockroachDB با Go نوشته شده.
InfluxDB (۲۸ هزار ستاره) database پیشرو برای time-series است که برای monitoring و IoT استفاده میشه. TiDB (۳۷ هزار ستاره) یک distributed HTAP database با سازگاری MySQL و الهام از Google F1 است. etcd (۴۷ هزار ستاره) - یک graduated CNCF project که control plane Kubernetes رو power میکنه - یک distributed key-value store است که از الگوریتم consensus Raft استفاده میکنه. Vitess (۱۸ هزار ستاره) سیستم database clustering برای horizontal scaling MySQL است که infrastructure database یوتیوب رو power میکنه.
Gin با ۷۷ هزار ستاره محبوبترین web framework Go است - تا ۴۰ برابر سریعتر از Martini با حدود ۳۴-۳۶ هزار request در ثانیه در benchmark های واقعی. Echo (۲۹ هزار ستاره) یک جایگزین قدرتمند با performance مشابه و feature های گستردهتر مثل پشتیبانی HTTP/2 و automatic TLS است. Fiber (۳۳ هزار ستاره) سریعترین framework با الهام از Express.js است که روی FastHTTP ساخته شده - حدود ۳۶ هزار RPS و ۴۰ درصد سریعتر از Echo در بعضی benchmark ها.
در نظرسنجی ۲۰۲۵، ۴۸ درصد developer های Go از Gin، ۱۶ درصد از Echo و ۱۱ درصد از Fiber استفاده میکنن. البته خیلیها مستقیماً از standard library net/http استفاده میکنن که خودش خیلی قدرتمند و کامل است.
Hugo (۷۵ هزار ستاره) سریعترین static site generator دنیا و شماره یک در این دسته است. سایتهای بزرگ مثل kubernetes.io، brave.com و سایتهای دولتی با Hugo ساخته شدن. Cobra (۳۷ هزار ستاره) - که توسط Steve Francia (spf13) خالق Hugo ساخته شده - کتابخانه CLI برای ساخت application های command-line است که در Kubernetes، Docker، GitHub CLI، Hugo، etcd و بیش از ۱۷۳ هزار پروژه استفاده میشه. Viper (۲۷ هزار ستاره) راهحل کامل configuration برای Go application ها و companion Cobra است - با هم “Bread & Butter” CLI های Go محسوب میشن.
ابزارهای CLI دیگه شامل kubectl (ابزار command-line Kubernetes)، gh (GitHub CLI با ۳۶ هزار ستاره)، lazygit (۵۱ هزار ستاره) برای git management با terminal UI، lazydocker (۳۶ هزار ستاره) برای Docker، و dive (۴۶ هزار ستاره) برای explore کردن layer های Docker image میشن.
Caddy (۵۷ هزار ستاره) یک web server با automatic HTTPS است - خیلی سادهتر از nginx برای setup. Traefik (۵۰ هزار ستاره) یک modern reverse proxy و load balancer برای microservices است. هر دو به خاطر سادگی deployment (single binary)، performance و پشتیبانی عالی از container ها با Go نوشته شدن.
تمام این پروژههای بزرگ دلایل مشابهی برای انتخاب Go داشتن. Performance بدون complexity - تیم CockroachDB گفتن: “تلاش لازم برای ساختن library های خودمان در C++ کار سخت رو بیشتر پیچیده میکرد.” Go به اندازه کافی سریع برای database ها است، اما خیلی سادهتر از C++.
Concurrency first - goroutine های native و channel ها برای distributed system ها، web server ها و database ها ضروری هستن. تیم CoreOS درباره etcd گفتن: “پشتیبانی عالی cross-platform Go، binary های کوچک، و community فوقالعاده.”
سادگی deployment - یک static binary، cross-compilation داخلی، بدون dependency های runtime. عالی برای container ها و cloud deployment. Reliability - error handling صریح، و به قول یک developer: “Go شما رو مجبور میکنه خیلی بیشتر به error ها فکر کنین… قابلیت اطمینان سیستمهایی که با Go ساخته میشن بسیار بالاست.”
Go از یک زبان آزمایشی در گوگل به انتخاب اصلی برای backend development در صنعت تبدیل شده. امروز حدود ۱.۱ میلیون developer حرفهای Go رو به عنوان زبان اصلی استفاده میکنن، و تا ۲.۷ میلیون اگه developer هایی که به صورت ثانویه از Go استفاده میکنن رو هم حساب کنیم. بیش از ۲۶۰۰ شرکت documented استفاده از Go دارن، و Go حدود ۷ درصد سهم بازار زبانهای برنامهنویسی رو داره.
گوگل طبیعتاً بزرگترین کاربر Go است. تیم Core Data Solutions سرویسهای web indexing رو نگهداری میکنه، و سرویسهای backend Chrome از جمله Chrome Optimization Guide با Go نوشته شدن. مزایا شامل scalability برتر، سرعت بدون complexity (performance نزدیک به C/C++)، رویکرد استاندارد به concurrency، و زمانهای compile سریعتر برای codebase عظیم گوگل میشه.
Uber یکی از بزرگترین کاربران Go در دنیاست با ۵۰ میلیون خط کد در monorepo و بیش از ۲۱۰۰ سرویس یکتای Go. این monorepo بیش از ۱۰۰۰ commit در روز میبینه و حدود ۳۰۰۰ microservice در production deploy شده.
Geofence Lookup Service که در ۲۰۱۵ با Go ساخته شد، به highest QPS service در Uber تبدیل شد - صدها هزار request در ثانیه با 99th percentile latency کمتر از ۱۰۰ میلیثانیه. این سرویس برای هر request اپ موبایل استفاده میشه و از زمان راهاندازی ۹۹.۹۹ درصد uptime داشته (downtime ها به خاطر third-party library ها بوده نه خود Go).
AresDB - database real-time که با Go نوشته شده - dashboard های analytics real-time رو power میکنه و تصمیمگیری data-driven در مقیاس Uber رو ممکن میسازه. یک نکته جالب: microservice های Go در Uber تقریباً ۸ برابر concurrency بیشتری نسبت به microservice های Java expose میکنن.
Twitch از Go برای بارترین سیستمهایش که میلیونها کاربر همزمان رو serve میکنن استفاده میکنه. سیستم chat مبتنی بر IRC روی هر host بیش از ۵۰۰ هزار کاربر همزمان رو با ۱.۵ میلیون goroutine در هر process سرویس میده.
بهبودهای GC در Go برای Twitch حیاتی بود: بین Go 1.4 و 1.6 بهبود ۲۰ برابری در factor GC رو دیدن، از pause time های چند ثانیهای در Go 1.2-1.4 به حدود ۲۰۰ میلیثانیه در Go 1.5، سپس ۱۰۰ میلیثانیه در Go 1.6، و نهایتاً کمتر از ۷۰ میلیثانیه - یک بهبود ۳۰ برابری کلی. همچنین با بهینهسازی GC، ۴۵ درصد بهبود در p99 API latency گرفتن.
Dropbox از ۲۰۱۴ شروع به migrate کردن backend های performance-critical از Python به Go کرد - حدود ۲۰۰ هزار خط کد. دلیل؟ پشتیبانی بهتر از concurrency و سرعت execution بالاتر. سیستم ذخیرهسازی Magic Pocket با Go نوشته شد و tail latency های ۳ تا ۵ برابر بهتر نسبت به implementation قبلی داشت، که منجر به صرفهجویی هزینه چشمگیر شد.
Netflix از Go برای سیستمهای performance-critical که نیاز به concurrency بالا با latency کم دارن استفاده میکنه. Application data caching با SSD ها - Go رو انتخاب کردن چون latency کمتری نسبت به Java داره (به خاطر GC pause ها) و productive تر از C است، در حالی که دهها هزار connection کاربر رو handle میکنه.
Chaos Monkey - ابزار معروف chaos engineering که resilience پلتفرم رو test میکنه - با Go نوشته شده. همچنین NEWT (Netflix Workflow Toolkit) - ابزار command-line برای build workflow ها - با Go پیادهسازی شده.
ByteDance گزارش کرده که ۷۰ درصد microservice ها در شرکت با Go نوشته شدن. Go از ۲۰۱۴ به ByteDance معرفی شد و امروز backbone معماری microservice شرکتی است که بیش از ۴۰ میلیون کاربر فعال روزانه (برای TikTok) داره. ByteDance حتی framework microservice CloudWeGo رو توسعه داد و در ۲۰۲۱ open-source کرد.
Cloudflare تمام infrastructure DNS، SSL/TLS handling، load balancing و WAF خودش رو با Go ساخته. RRDNS - DNS proxy که infrastructure DNS Cloudflare رو scale میکنه - با Go نوشته شده. Railgun - تکنولوژی compression که connection های بین data center های Cloudflare و origin server ها رو سرعت میبخشه - حدود ۴۰۰۰ خط کد Go داره.
به قول کلودفلر “Go در قلب سرویسهای CloudFlare قرار داره از جمله handling compression برای connection های HTTP با latency بالا، تمام infrastructure DNS ما، SSL، load testing و بیشتر.”
یک نکته جالب: طبق گزارش ۲۰۲۴ Cloudflare، Go زبان شماره ۱ برای API client ها در سطح جهانی شده با ۱۱.۸ درصد سهم، از Node.js (۱۰ درصد) و Python (۹.۶ درصد) جلو زده.
American Express از Go برای payment و rewards network استفاده میکنه - هزاران transaction در ثانیه رو real-time پردازش میکنه. PayPal هم Go رو برای modernization و scaling infrastructure transaction processing خودش انتخاب کرده.
Capital One یک داستان adoption جالب داره. تیمی که در ۲۰۱۶-۲۰۱۷ Go رو شروع کردن گفتن: “در اون زمان هیچ عضو تیم Go بلد نبود، اما ظرف یک ماه همه داشتن Go مینوشتن و endpoint ها رو میساختن. انعطافپذیری، راحتی استفاده، و concept های جذاب Go (native concurrency، garbage collection و البته safety + speed) باعث شد ما درگیر بشیم.”
Riot Games - سازنده Valorant - تمام backend microservice architecture بازی رو با Go ساخته. مدیریت game server، سیستمهای خرید درون بازی، و connection های real-time player ها همه با Go هستن.
SoundCloud از Go برای backend service هایی استفاده میکنه که streaming موسیقی بدون وقفه رو تضمین میکنن. Twilio (SendGrid) میلیاردها ایمیل در ماه رو پردازش و ارسال میکنه - بیش از ۵۰۰ میلیون پیام در روز.
Twitter در transition از monolithic Ruby-on-Rails به distributed microservices، Go رو در کنار Java و Scala برای microservice های خاصی که نیاز به concurrency سریع و efficient دارن استفاده میکنه. backend Answers analytics که ۵ میلیارد session در روز رو handle میکنه با Go نوشته شده.
نوامبر ۲۰۲۴، Go برای اولین بار به رتبه ۷ در ایندکس TIOBE رسید - بالاترین رتبه در تاریخ ۱۶ سالهاش. Paul Jansen، CEO TIOBE، توضیح داد: “چیزی که Go رو در top 10 یکتا میکنه این است که برنامههای Go سریع و راحت برای deploy هستن، در حالی که زبان راحت یاد گرفته میشه. Python مثلاً راحت یاد گرفته میشه اما سریع نیست، و deployment برای برنامههای بزرگ Python به خاطر dependency به library های مختلف با version های مختلف شکننده است.”
مسیر Go در TIOBE:
اگر روند سالانه ادامه پیدا کنه، Go ظرف ۳ سال از JavaScript (رتبه ۶ فعلی) جلو میزنه.
گزارش ۲۰۲۳ GitHub Octoverse نشون داد Go با ۴۰ درصد year-over-year رشد میکنه - مشابه Rust. Go در رتبه ۹ محبوبترین زبانها برای پروژههای جدید قرار داره. این رشد به خاطر پروژههای cloud-native مثل Kubernetes و Prometheus است.
در ۲۰۲۲، GitHub گزارش کرد: “افزایش شدید در استفاده بین developer ها” برای Go، و رشد رو به “ease of use و قابلیتهای قدرتمند در cloud development، scripting و interoperability” نسبت داد.
در نظرسنجی ۲۰۲۵ Stack Overflow با ۴۹ هزار پاسخدهنده، Python، Rust و Go (با ۲ درصد رشد) نشان دادن که در حال رشد هستن. این زبانها AI-compatible هستن و در توسعه و infrastructure AI استفاده میشن.
RedMonk که GitHub activity و Stack Overflow discussion رو ترکیب میکنه، Go رو در رتبه ۱۳-۱۵ در ژانویه ۲۰۲۴ قرار داده. توضیح دادن: “resurgence با ترکیبی از دسترسی، طراحی و performance” و “زبان معقول compromise برای use case های backend development.”
مسیر Go در RedMonk نشوندهنده صعود پیوسته است: از رتبه ۱۶ در ۲۰۱۵ به ۱۳-۱۵ در ۲۰۲۴.
شانزده سال بعد از open-source شدن، Go ثابت کرده که نه فقط یک زبان موفق، بلکه زبان اصلی برای infrastructure مدرن است. رمز این موفقیت در طراحی اولیهاش نهفته: سادگی Python، سرعت C، مدل concurrency قدرتمند، و compile به single binary بدون dependency.
۶۹ درصد تسلط در CNCF، رتبه ۷ TIOBE، رشد ۴۰ درصدی GitHub، و ۱.۱ میلیون developer حرفهای همه داستان یکسانی رو میگن: Go دقیقاً برای چالشهای دهه ۲۰۲۰ طراحی شده بود - microservices، container ها، cloud-native، و سیستمهای distributed.
از Docker و Kubernetes که دنیا رو تغییر دادن، تا Uber با ۵۰ میلیون خط کد و Twitch با ۵۰۰ هزار کاربر همزمان روی هر host، زبان Go ثابت کرده که میتونه در بزرگترین مقیاسها کار کنه. برای developer های backend ایرانی که میخوان skill هایی یاد بگیرن که در صنعت جهانی relevant و پرتقاضا باشه، Go یک انتخاب استراتژیک است - زبانی که نه تنها امروز محبوب است، بلکه به نظر میرسه آینده infrastructure رو برای سالهای زیادی تعریف خواهد کرد.
به مناسبت شانزدهمین سالگرد زبان Go، یک هدیه ویژه برای شما آماده کردیم!
اگه میخوای همین امروز یادگیری Go و Backend Development رو شروع کنی، با استفاده از کد تخفیف ویژه میتونی تا ۲ میلیون تومان تخفیف دریافت کنی.
شما هم میتونی به جمع بیش از ۱۰۰۰ شرکتکننده بپیوندی که برای یادگیری گولنگ GoCasts رو انتخاب کردن.