آموزش برنامه نویسی Go از صفر: کاربرد و نقشه راه
آموزش برنامه نویسی Go (گولنگ) از صفر: زبان Go چیست، کجا کاربرد دارد، اولین برنامه، همزمانی با goroutine و نقشه راه یادگیری برای بکاند.
آموزش برنامه نویسی Go را با مبانی ساده زبان شروع کنید، بعد ساختارها، اینترفیسها و مدیریت خطا را یاد بگیرید، سپس همزمانی با goroutine و channel را تمرین کنید و در نهایت یک API یا سرویس بکاند واقعی بسازید. Go (که به آن Golang هم میگویند) زبانی ساده، سریع و مناسب ساخت سرویسهای بکاند، ابزارهای زیرساخت و برنامههای خط فرمان است.
در این مقاله از آکادمی برنامه نویسی بدیعی میبینید Go چیست، چه کاربردهایی دارد، برای چه کسانی مناسب است، اولین کدها را چطور بنویسید و نقشه راه یادگیری آن چیست.
زبان Go چیست؟
Go یک زبان برنامهنویسی کامپایلری و متنباز است که در گوگل طراحی شد تا نوشتن نرمافزارهای سرور سریع، ساده و قابل نگهداری باشد. طراحان Go عمدا زبان را کوچک نگه داشتند تا خواندن کد دیگران آسان باشد.
ویژگیهای مهم Go:
سادگی: تعداد کلمات کلیدی و قابلیتهای زبان کم است و یادگیری سینتکس سریع است.
کامپایل سریع و خروجی تکفایلی: برنامه به یک فایل اجرایی تبدیل میشود که انتشار آن ساده است.
همزمانی داخلی: با goroutine و channel میتوانید کارهای همزمان را راحت مدیریت کنید.
مدیریت خودکار حافظه: جمعآوری زباله (Garbage Collector) دارد.
ابزارهای استاندارد: قالببندی کد، تست و مدیریت ماژولها همراه خود زبان آمده است.
Go کجا کاربرد دارد؟
Go بیشتر در سرویسهای بکاند، میکروسرویسها، ابزارهای زیرساخت ابری و برنامههای خط فرمان استفاده میشود.
حوزه توضیح
API و سرویس بکاند سرویسهایی که درخواستهای زیاد همزمان دریافت میکنند
میکروسرویس سرویسهای کوچک و مستقل که با هم کار میکنند
زیرساخت و DevOps بسیاری از ابزارهای شناختهشده کانتینر و ابر با Go نوشته شدهاند
ابزار خط فرمان (CLI) ابزارهایی که بهصورت یک فایل اجرایی منتشر میشوند
شبکه و پراکسی برنامههایی که با ارتباطات شبکه سروکار دارند
Go برای ساخت رابط کاربری دسکتاپ، اپ موبایل یا تحلیل داده و هوش مصنوعی انتخاب رایجی نیست. برای این کارها زبانهای دیگر اکوسیستم قویتری دارند.
برای آشنایی با کل حوزه سمت سرور و زبانهای رایج آن، مقاله برنامه نویسی بک اند را بخوانید.
آموزش Go برای چه کسانی مناسب است؟
Go برای کسانی مناسب است که به بکاند، سرویسهای پرترافیک و ابزارهای زیرساخت علاقه دارند، بهخصوص اگر قبلا با یک زبان دیگر کار کرده باشند.
برنامهنویسهای بکاند: که میخواهند سرویسهای سریع و سبک بسازند.
علاقهمندان به DevOps و زیرساخت: چون بسیاری از ابزارهای این حوزه با Go نوشته شدهاند.
مبتدیها: Go به خاطر سادگی برای شروع بد نیست، اما منابع فارسی و فرصتهای شغلی آن را قبل از انتخاب بررسی کنید.
کسانی که از پیچیدگی خستهاند: Go عمدا ساده و صریح طراحی شده است.
پیشنیازها و نصب Go
برای شروع Go فقط کافی است Go را از سایت رسمی نصب کنید و یک ویرایشگر کد مثل VS Code با افزونه Go داشته باشید. دانش قبلی برنامهنویسی الزامی نیست، اما کمک میکند.
نصب Go: از سایت رسمی زبان، نسخه مخصوص سیستمعامل خود را دریافت کنید.
ویرایشگر: VS Code با افزونه Go یا محیط GoLand.
ترمینال: بیشتر کارهای Go از خط فرمان انجام میشود.
⚠️ آخرین نسخه Go، روش نصب و دسترسی به سایت رسمی و مخزن ماژولها از ایران ممکن است تغییر کرده باشد یا محدودیت داشته باشد .
اولین برنامه Go
هر برنامه Go از یک بسته (package) شروع میشود و نقطه شروع اجرای آن تابع main در بسته main است.
package main
import "fmt"
func main() {
name := "سارا"
fmt.Println("سلام", name)
نکتههای این کد:
package main : یعنی این فایل یک برنامه اجرایی است.
import "fmt" : بسته استاندارد چاپ و قالببندی را اضافه میکند.
:= : متغیر را تعریف میکند و نوع آن را خودکار تشخیص میدهد.
fmt.Println : متن را چاپ میکند.
برای اجرا، در ترمینال دستور go run main.go را بزنید.
مدیریت خطا در Go
Go استثنا (Exception) به شکل رایج زبانهای دیگر ندارد و خطا را بهعنوان یک مقدار برگشتی صریح مدیریت میکند. این روش در ابتدا کمی تکراری به نظر میرسد، اما کد را قابل پیشبینی میکند.
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("تقسیم بر صفر ممکن نیست")
return a / b, nil
result, err := divide(10, 0)
if err != nil {
fmt.Println("خطا:", err)
تابع دو مقدار برمیگرداند: نتیجه و خطا. اگر خطا nil نباشد، یعنی مشکلی پیش آمده است. برای استفاده از errors.New باید بسته errors را هم import کنید.
همزمانی در Go: goroutine و channel
بزرگترین نقطه قوت Go همزمانی ساده است؛ با گذاشتن کلمه go قبل از صدا زدن یک تابع، آن تابع همزمان با بقیه برنامه اجرا میشود.
func worker(id int, results chan<- string) {
results <- fmt.Sprintf("کار %d تمام شد", id)
func main() {
results := make(chan string)
for i := 1; i <= 3; i++ {
go worker(i, results)
for i := 1; i <= 3; i++ {
fmt.Println(<-results)
goroutine: یک واحد اجرای سبک است. میتوانید تعداد زیادی از آن را همزمان اجرا کنید.
channel: لولهای برای ارسال داده بین goroutineهاست و جلوی بسیاری از مشکلات اشتراک داده را میگیرد.
ترتیب چاپ خروجیها در این مثال ممکن است هر بار فرق کند؛ چون کارها واقعا همزمان اجرا میشوند.
نقشه راه یادگیری Go
نقشه راه Go از مبانی شروع میشود، به ساختارها و اینترفیسها میرسد، با همزمانی عمیق میشود و با ساخت سرویس واقعی کامل میشود.
مرحله ۱: مبانی زبان
متغیر، انواع داده، شرط، حلقه for (تنها حلقه Go)، تابع، آرایه، Slice و Map.
مرحله ۲: ساختار، متد و اینترفیس
Go کلاس به شکل سنتی ندارد. بهجای آن از struct ، متد و interface استفاده میکند. این سبک را خوب یاد بگیرید.
مرحله ۳: مدیریت خطا، بستهها و ماژولها
الگوی if err != nil ، ساخت بستههای خودتان و مدیریت وابستگیها با Go Modules.
مرحله ۴: همزمانی
goroutine، channel، select ، sync.WaitGroup و context برای لغو و مدیریت زمان.
مرحله ۵: ساخت API و کار با پایگاه داده
ساخت REST API با بسته استاندارد net/http یا یک فریمورک سبک، اتصال به پایگاه داده، احراز هویت و نوشتن تست.
مرحله ۶: انتشار و پروژه
برنامه را در یک کانتینر منتشر کنید، کد را در GitHub بگذارید و یک پروژه کامل مثل کوتاهکننده لینک یا سرویس اعلان بسازید.
Go یا ASP.NET Core برای بکاند؟
Go ساده و سبک است و برای سرویسهای کوچک و زیرساخت عالی است؛ ASP.NET Core امکانات آماده بیشتری برای سامانههای سازمانی و پروژههای بزرگ وب دارد.
معیار Go ASP.NET Core (C#)
فلسفه حداقل امکانات، سادگی فریمورک کامل و یکپارچه
سرعت و مصرف منابع بسیار خوب بسیار خوب
امکانات آماده کمتر؛ بیشتر با کتابخانهها زیاد: Identity، EF Core، تزریق وابستگی
کاربرد غالب میکروسرویس، DevOps، CLI وبسایت، API، سامانه سازمانی
رابط کاربری وب معمولا جدا Razor، Blazor و API
انتخاب به هدف و بازار کار هدف شما بستگی دارد. برای تصمیم درست، آگهیهای جابینجا، جابویژن و لینکدین را بررسی کنید و ببینید در شهر و صنعت مورد نظرتان کدام فناوری بیشتر خواسته شده است.
برای آشنایی با ASP.NET Core، مقاله آموزش ASP.NET Core را بخوانید. وضعیت کلی شغلها هم در مقاله بازار کار برنامه نویسی بررسی شده است.
اشتباههای رایج در یادگیری Go
رایجترین اشتباه، نوشتن Go با ذهنیت یک زبان دیگر است.
شبیهسازی کلاس و وراثت: Go ترکیب (Composition) و اینترفیس را ترجیح میدهد.
نادیده گرفتن خطاها: نوشتن _ بهجای بررسی خطا، باگهای پنهان میسازد.
استفاده بیحساب از goroutine: همزمانی بدون کنترل، مشکلاتی مثل نشت goroutine یا شرایط رقابتی (Race Condition) ایجاد میکند.
رفتن سریع سراغ فریمورک: کتابخانه استاندارد Go برای بسیاری از کارها کافی است. اول آن را بشناسید.
نساختن پروژه: بدون پروژه بکاند واقعی، مهارت شما در مصاحبه قابل نشان دادن نیست.
آیا آکادمی بدیعی دوره Go دارد؟
دورههای فعلی آکادمی بدیعی روی سیشارپ، ASP.NET Core و توسعه وب فولاستک متمرکز است و دوره اختصاصی Go در فهرست دورهها معرفی نشده است.</</p
بیشتر مفاهیم بکاند مثل طراحی API، احراز هویت با JWT، کار با پایگاه داده و معماری تمیز، بین Go و ASP.NET Core مشترک است. اگر این مفاهیم را در یکی محکم یاد بگیرید، یادگیری دیگری بسیار سریعتر میشود.
برای انتخاب زبان بر اساس هدفتان، مقاله بهترین زبان برنامه نویسی را ببینید.
جمعبندی
آموزش برنامه نویسی Go با سینتکس ساده شروع میشود و با ساختارها، اینترفیسها، مدیریت خطا و همزمانی عمیق میشود. Go برای سرویسهای بکاند سبک، میکروسرویسها و ابزارهای زیرساخت انتخاب قدرتمندی است، به شرط اینکه با سبک خود Go کد بنویسید و پروژه واقعی بسازید.
اگر نمیدانید Go، سیشارپ یا زبان دیگری برای هدف شغلی شما مناسبتر است، از صفحه اصلی آکادمی بدیعی مشاوره رایگان بگیرید. اگر به بکاند و توسعه وب علاقه دارید، دوره جامع فولاستک وب طلایی با C#، ASP.NET Core، Web API و JWT را ببینید.
سوالات متداول
فرق Go و Golang چیست؟
هیچ فرقی ندارند. نام رسمی زبان Go است و Golang نامی است که برای جستوجوی راحتتر در اینترنت رایج شده.
آیا Go برای شروع برنامهنویسی مناسب است؟
Go زبان سادهای است و برای شروع بد نیست. اما منابع آموزشی فارسی و تعداد فرصتهای شغلی آن را در شهر خودتان قبل از انتخاب بررسی کنید.
Go بیشتر برای چه کاری استفاده میشود؟
برای سرویسهای بکاند، API، میکروسرویسها، ابزارهای DevOps و برنامههای خط فرمان.
آیا Go شیگراست؟
نه به شکل سنتی. Go کلاس و وراثت ندارد، اما با struct، متد و interface بسیاری از مزایای شیگرایی را به روش سادهتری فراهم میکند.
Go سریعتر است یا C#؟
هر دو سریعاند و تفاوت به نوع برنامه بستگی دارد. در بیشتر پروژههای وب، طراحی درست سیستم و پایگاه داده اثر بیشتری از انتخاب زبان دارد.
یادگیری Go چقدر طول میکشد؟
به تجربه قبلی و وقت روزانه شما بستگی دارد. برای کسی که زبان دیگری بلد است، سینتکس Go سریع یاد گرفته میشود؛ تسلط بر همزمانی و ساخت سرویس واقعی تمرین بیشتری میخواهد.
ادامه بدهید