GoCasts آموزش Go به زبان ساده

بیش از ۱۰۰۰ شرکت‌کننده یادگیری Go و Backend رو از امروز شروع کن
ثبت‌نام دوره + تیم‌سازی

وقتی AI کد می‌نویسه، انتخاب زبان مهم‌تر می‌شه، نه کم‌اهمیت‌تر

وقتی AI کد می‌نویسه، انتخاب زبان مهم‌تر می‌شه، نه کم‌اهمیت‌تر

گوگل امروز پستی منتشر کرده با این ادعا که Go برای توسعه‌ی AI-assisted زبان ایده‌آلیه.

خلاصه‌ی استدلالشون:

🔹 گلوگاه از نوشتن رفته سمت review. قبلاً بهره‌وری زبان (productivity) رو با «چقدر راحت باهاش کد می‌نویسی» می‌سنجیدیم؛ الان که ایجنت در چند ثانیه صدها خط کد با syntax درست تولید می‌کنه، سرعت تایپ آدم موضوعیت نداره. چیزی که مونده خوندن، verify کردن و نگه‌داری کد هست.

🔹 گولنگ فقط زبان نیست، پلتفرمه. داشتن formatter، ابزارهای کامل تست، مدیریت وابستگی و ابزار امنیتی همه داخل خود toolchain رسمیه. برای ایجنت یعنی یه حلقه‌ی فیدبک قطعی و ارزون؛ به‌جای اینکه چند مرتبه روی کد refactor کنه و سعی و خطا کنه، و توکن مصرف کنه، از خروجی ابزار استفاده می‌کنه و کد تصحیح می‌شه.

🔹 خوانایی مهم‌تر از نوشتنه. یک راه برای هر کار وجود داره و نه بیشتر. یعنی کد سنیور و جونیور و LLM شبیه هم درمیاد و پیدا کردن API توهم‌زده توی کد یکنواخت خیلی سریع‌تره. همین یکدستی، دیتای train مدل‌ها رو هم تمیزتر کرده — خروجی Go با shot کمتری درست درمیاد.

🔹 کامپایلر به‌عنوان تور ایمنی. متد ناموجود، تایپ غلط، متغیر بلااستفاده، اصلاً کامپایل نمی‌شن. همین توهم‌ها توی پایتون تا runtime پروداکشن زنده می‌مونن.

🔹 زنجیره‌ی تأمین. مدل از روی دیتای قدیمی‌اش ممکنه پکیج منسوخ‌شده یا آلوده پیشنهاد بده؛ اما stdlib غنی Go کمتر اجازه می‌ده سراغ dependency خارجی بری و همچنین در کنارش checksum db و govulncheck وجود داره که جلوگیری می‌کنه از این مشکلات.

🔹 نگه‌داری. تعهد سازگاری (Go 2.0 هیچ‌وقت نمیاد)، باینری استاتیک تک‌فایلی و cross-compile راحت، و go fix از جمله ویژگی‌هایی‌ست که نگهداری برنامه نوشته شده رو راحت‌تر می‌کنه.

به جز مواردی که در مقاله بهش اشاره شده یه کامنت جالب خوندم در مورد این مقاله: «مهم‌ترین دلیل رو جا انداختن: Go سریع کامپایل می‌شه». این موضوع به agent اجازه میده iterationهای سریع برای توسعه و دیباگ داشته باشه.

در ادامه یک سری نکات شخصی رو مطرح می‌کنم. اگه بخوام در مورد مقاله نظر بدم باید بگم که این پست بالاخره مارکتینگ گوگله، و چیزی که کامپایلر Go جلوش رو می‌گیره ارزون‌ترین نوع باگه. اون چیزی که تو پروداکشن ما رو زمین می‌زنه goroutine leak ـه، context ای که cancel نمی‌شه، error ای که handle نشده، و race — همه‌شون بی‌صدا کامپایل می‌شن. Go حلقه‌ی verification رو ارزون می‌کنه، جای ری‌ویو آدم رو نمی‌گیره.

ضمنا یه نکته که کمتر گفته می‌شه: verbosityی Go سال‌ها هزینه‌ی نوشتن کد بود؛ حالا که نویسنده‌ش ایجنته، اون هزینه تقریباً صفر شده و فقط سود خوانایی‌اش مونده. اقتصادِ trade-off خوبی و بدی زبان‌های برنامه‌نویسی داره عوض می‌شه.

از زاویه agentic development بخوایم نگاه کنیم، حرف اصلی این نیست که «Go خوبه»؛ بحث اینه که «حلقه‌ی verification رو چطور به ایجنت وصل کنی»

یه کار خوب برای توسعه agentic اینه که ایجنت رو به toolchain گولنگ وصل کنیم.

توی پست گوگل یه لینک هست: مخزن spf13/go-skills — نوشته‌ی spf13 (لید سابق تیم Go، نویسنده‌ی Cobra و Viper و Hugo). چند تا skill آماده داره: go (idiomatic go)، go-spec-reviewer، go-release، cobra-viper. یا از طریق plugin marketplace نصبش می‌کنی یا دایرکتوری‌ها رو symlink می‌کنی به ~/.agents/skills/. مزیت skill نسبت به یه CLAUDE.md بزرگ اینه که on-demand لود می‌شه و context ایجنت رو الکی پر نمی‌کنه.

ولی skill فقط مدل رو bias می‌کنه. چیزی که واقعاً کیفیت خروجی رو بالا می‌بره، تعریف کردن Definition of Done به‌صورت دستور اجرایی ـه. مواردی که مطرح میشه رو می‌تونید در AGENTS.md قرار بدید و از ایجنت بخواید تا اجرای این دستورات بدون خطا تموم نشه باید کارش رو ادامه بده:

استفاده از go build برای از بین بردن توهم تایپ و متد. استفاده از gofmt و همچنین استفاده از go test -race‍ و go test -fuzz میتونه کمک کنه که ایجنت راحت‌تر از ابزارهای خود زبان کمک بگیره برای توسعه.

سه تا نکته‌ی عملی که هزینه‌ی توکن رو واقعاً پایین میاره:

۱) ریفکتور رو بده به ابزار قطعی، نه به مدل. go fix با modernizerها و gopls تغییر ساختاری رو روی صدها فایل بدون توهم انجام می‌دن. مدل باید تصمیم بگیره، نه اینکه ۲۰۰ فایل رو دستی بازنویسی کنه. البته برای هر ریفکتوری این کار امکانپذیر نیست.

۲) سیاست stdlib-first رو صریح بنویس. مدل از روی دیتای قدیمی‌اش پکیج منسوخ‌شده پیشنهاد می‌ده. قانون «دیپندنسی جدید بدون تأیید ممنوع» هم ریسک زنجیره‌ی تأمین رو کم می‌کنه هم داکیومنت اضافه رو از context بیرون نگه می‌داره. به‌جای ریختن کل پکیج توی context، بذار go doc بزنه.

۳) حلقه رو کوتاه نگه دار. go test -run هدف‌دار به‌جای اجرای کل تست‌سوئیت. سرعت کامپایل Go وقتی ارزش داره که ایجنت هر بار کل مونوریپو رو build نکنه.

اینم در نظر داشته باشید که skill و AGENTS.md لایه‌ی پیشنهاد به ایجنت هستن، نه اجبار. ایجنت وقتی گیر می‌کنه راحت میاد تست رو skip می‌کنه یا assert رو عوض می‌کنه تا تست سبز شه. تنها جایی که واقعاً enforce می‌شه pre-commit hook و CI ـه. skill رو با gate اشتباه نگیریم.

منابع

https://developers.googleblog.com/why-go-is-an-ideal-language-for-ai-assisted-software-engineering

https://github.com/spf13/go-skills

بیش از ۱۰۰۰ شرکت‌کننده یادگیری Go و Backend رو از امروز شروع کن
ثبت‌نام دوره + تیم‌سازی