گو۱۲ درس رایگان

آموزش زبان گو (Golang) از صفر با تمرین در مرورگر

در این دوره زبان Go را از اولین برنامه تا هم‌روندی با goroutine و channel یاد می‌گیرید. هر برنامه را در مرورگر می‌نویسید و همان لحظه اجرا و بررسی می‌شود.

  • کامپایلر واقعی Go، بدون نصب
  • از اولین برنامه تا goroutine و channel
  • درس‌های اول رایگان است
ببینید چه می‌سازید
درس
۱۴۸
تمرین
۱۱۴
ساعت آموزش
۳۷
پایان دوره
گواهی
نمونه: شمردن عددهای اول با چهار goroutine
main.goشمردن عددهای اول با چهار goroutine
package main
 
import (
	"fmt"
	"sync"
)
 
// isPrime عدد را با تقسیم تا ریشهٔ دومش بررسی می‌کند
func isPrime(n int) bool {
	if n < 2 {
		return false
	}
	for d := 2; d*d <= n; d++ {
		if n%d == 0 {
			return false
		}
	}
	return true
}
 
func main() {
	const limit, parts = 200000, 4
	size := limit / parts
	counts := make([]int, parts) // هر goroutine فقط در خانهٔ خودش می‌نویسد
	var wg sync.WaitGroup
 
	for p := 0; p < parts; p++ {
		wg.Add(1)
		go func(p int) {
			defer wg.Done()
			for n := p*size + 1; n <= (p+1)*size; n++ {
				if isPrime(n) {
					counts[p]++
				}
			}
		}(p)
	}
	wg.Wait() // صبر تا هر چهار بخش تمام شود
 
	total := 0
	for p, c := range counts {
		fmt.Printf("part %d: %6d..%-6d %5d primes\n", p+1, p*size+1, (p+1)*size, c)
		total += c
	}
	fmt.Printf("total: %d primes up to %d\n", total, limit)
}
خروجی
part 1:      1..50000   5133 primes
part 2:  50001..100000  4459 primes
part 3: 100001..150000  4256 primes
part 4: 150001..200000  4136 primes
total: 17984 primes up to 200000

بازهٔ ۱ تا ۲۰۰ هزار به چهار بخش تقسیم می‌شود و هر بخش را یک goroutine هم‌زمان بررسی می‌کند. هر goroutine فقط در خانهٔ خودش می‌نویسد، پس خروجی هر بار یکسان است. نمونه‌های دیگر

نمونه‌کدها

برنامه‌هایی که بعد از این دوره می‌نویسید

این شش برنامه را برای همین صفحه نوشته‌ایم. هر کدام با همان Go درس‌ها اجرا شده و خروجی کنارش دقیقاً همان چیزی است که چاپ می‌کند.

آنچه یاد می‌گیرید

در این دوره چه چیزهایی یاد می‌گیرید

هر فصل یک بخش از زبان را با برنامه‌های کامل و کوچک تمرین می‌کند.

  1. فصل ۱ و ۲ و ۳

    اولین برنامه‌ها، ورودی و اعداد

    با package main و fmt برنامه می‌نویسید، از ورودی می‌خوانید و با نوع‌های عددی، تبدیل صریح و چاپ دقیق اعشار کار می‌کنید.

  2. فصل ۴ و ۵

    ثابت‌ها و کنترل جریان

    با const و iota مقدارهای ثابت می‌سازید و برنامه را با if، switch و حلقهٔ for هدایت می‌کنید.

  3. فصل ۶ و ۹

    توابع

    تابع با چند مقدار بازگشتی، تابع variadic، closure، تابع بازگشتی و defer می‌نویسید.

  4. فصل ۷ و ۸

    اسلایس و مپ

    با آرایه، اسلایس و مپ داده نگه می‌دارید، رفتار append و cap را می‌فهمید و خروجی مپ را با مرتب کردن کلیدها ثابت نگه می‌دارید.

  5. فصل ۱۰ و ۱۱ و ۱۲

    اشاره‌گر، استراکت و متد

    با اشاره‌گر مقدار را در جا تغییر می‌دهید، داده را با استراکت مدل می‌کنید و متد با گیرندهٔ مقداری یا اشاره‌گری می‌نویسید.

  6. فصل ۱۳

    اینترفیس‌ها

    اینترفیس تعریف می‌کنید، با type switch و type assertion نوع واقعی مقدار را می‌گیرید و با sort.Interface مرتب می‌کنید.

  7. فصل ۱۴ و ۱۵

    مدیریت خطا

    خطا را با %w بسته‌بندی و با errors.Is و errors.As بررسی می‌کنید و جای panic و recover را می‌شناسید.

  8. فصل ۱۶ و ۱۷ و ۲۰

    رشته‌ها و کتابخانهٔ استاندارد

    با strings، strconv، fmt، sort، bufio، regexp، time و encoding/json کار می‌کنید و متن فارسی را درست می‌شمارید.

  9. فصل ۱۸ و ۱۹

    هم‌روندی

    با goroutine، WaitGroup، channel، select، Mutex و sync.Once کار را موازی می‌کنید و خروجی را قابل پیش‌بینی نگه می‌دارید.

  10. فصل ۲۱ و ۲۲ و ۲۳

    سبک Go و پروژه‌های پایانی

    کد را به سبک رایج Go سازمان می‌دهید و ابزارهایی مثل خلاصه‌ساز لاگ، ماشین‌حساب RPN، ارزیاب عبارت و یک مفسر کوچک بایت‌کد می‌سازید.

Go یا پایتون

Go چه فرقی با پایتون دارد

Go چه فرقی با پایتون دارد
موضوعGoپایتون
اجرابه یک فایل اجرایی کامپایل می‌شود.با مفسر پایتون اجرا می‌شود.
نوع متغیرهاایستا؛ کامپایلر پیش از اجرا بررسی می‌کند.پویا؛ هنگام اجرا معلوم می‌شود.
کار هم‌زمانgoroutine و channel در خود زبانبا کتابخانه‌هایی مثل threading و asyncio
مدیریت خطاخطا مقداری است که تابع برمی‌گرداند.استثنا با try و except
کاربرد رایجسرویس‌های سمت سرور، ابزارهای خط فرمان و زیرساختتحلیل داده، هوش مصنوعی، اسکریپت‌نویسی و وب

هر دو زبان برای شروع انتخاب خوبی هستند. انتخاب میان آن‌ها بیشتر به کاری بستگی دارد که می‌خواهید انجام دهید.

روش کار

یک درس چطور پیش می‌رود

  1. ۱

    صورت تمرین را می‌خوانید

    هر درس یک مفهوم را کوتاه توضیح می‌دهد و یک برنامهٔ کامل از شما می‌خواهد.

  2. ۲

    برنامه را در مرورگر اجرا می‌کنید

    کد شما با Go کامپایل و اجرا می‌شود و خروجی یا پیام کامپایلر را همان‌جا می‌بینید.

  3. ۳

    تست‌ها کارتان را می‌سنجند

    دکمهٔ بررسی، برنامه را با چند ورودی اجرا می‌کند و خروجی را با جواب درست مقایسه می‌کند. اگر گیر کردید، راهنمای همان تمرین کمکتان می‌کند.

سرفصل‌ها

سرفصل‌های دوره

۲۳ سرفصل، ۱۴۸ درس، ۱۱۴ تمرین

۱

اولین برنامه‌ها: package main، اجرا و چاپ

۶ درس
۲

متغیرها، مقدار صفر و خواندن از ورودی

۷ درس
  • مقدار صفر (zero value): در Go هیچ‌چیز تعریف‌نشده نیستپیش‌نمایش رایگان
  • اعلانِ متغیرها و چاپِ مقدارهای صفرپیش‌نمایش رایگانتمرین
  • خواندن از stdin: fmt.Scan و bufio.Scannerپیش‌نمایش رایگان
  • اکو: آنچه را می‌خوانی برگردانپیش‌نمایش رایگانتمرین
  • جمعِ دو عدد از ورودیپیش‌نمایش رایگانتمرین
  • این کد آماده است: خواندن N سپس N عددپیش‌نمایش رایگانتمرین
  • تبدیل: عددِ خوانده‌شده را دو برابر کنتمرین
۳

اعداد، تایپ‌های پایه و فرمتِ قطعیِ اعشار

۷ درس
  • تایپ‌های عددی و چرا تبدیل همیشه صریح است
  • خارج‌قسمت و باقیماندهتمرین
  • قطعیّت اعشار: همیشه با ‎%.Nf‎ چاپ کن
  • مساحت دایره با دقت ثابتتمرین
  • تبدیل صریح تایپ و تقسیمِ واقعیتمرین
  • ریشه و توان با mathتمرین
  • تبدیل دما و سرریزِ تایپ‌های کوچکتمرین
۴

ثابت‌ها، iota و enum‌ها

۶ درس
  • ثابت‌ها و الگوی enum با iota
  • نامِ روزِ هفته از شمارهتمرین
  • بیت‌فلگ‌ها با 1<<iotaتمرین
  • این کد آماده است: enum با متدِ String()تمرین
  • ثابت‌های دما و تبدیلتمرین
  • اندازه‌ی فایل با ثابت‌های توان دوتمرین
۵

کنترل جریان: if، switch و تنها حلقه‌ی for

۷ درس
  • for تنها حلقه است؛ if و switch به سبکِ Go
  • این کد آماده است: ردِ یک حلقه را بزنتمرین
  • نمره‌ی حرفی با if/elseتمرین
  • FizzBuzz تا Nتمرین
  • دسته‌بندی با switch بدونِ عبارتتمرین
  • break برچسب‌دار در حلقه‌ی تو در توتمرین
  • جمع‌بندی: انتخابِ درستِ ساختارِ کنترلی
۶

توابع I: تعریف، چند مقدار بازگشتی و «تست از داخلِ main»

۶ درس
  • توابع، چند مقدار بازگشتی و الگوی تست‌از-main
  • تابعِ max از دو عددتمرین
  • کمینه و بیشینه با هم (چند مقدار بازگشتی)تمرین
  • این کد آماده است: یک تابع از چند ورودیِ مختلفتمرین
  • تابعِ خارج‌قسمت با علامتِ خطاتمرین
  • مقدارهای بازگشتیِ نام‌دار و return لختتمرین
۷

آرایه‌ها، اسلایس‌ها و رشدِ آن‌ها

۷ درس
  • آرایه در برابر اسلایس: header، len و cap
  • جمع و میانگینِ N عددتمرین
  • بیشینه و کمینه‌ی یک اسلایستمرین
  • وارونه کردنِ اسلایس در جاتمرین
  • append و حذفِ یک عنصرتمرین
  • جدولِ دو-بعدی: جمعِ سطرهاتمرین
  • این کد آماده است: cap، رشد و aliasingتمرین
۸

مپ‌ها و قطعیّت: همیشه کلیدها را سورت کن

۶ درس
  • مپ‌ها و قانونِ طلایی: ترتیبِ پیمایش تصادفی است
  • این کد آماده است: چاپِ قطعیِ یک مپتمرین
  • شمارشِ بسامدِ کلمه‌هاتمرین
  • وجود کلید با comma-okتمرین
  • مپ به‌عنوان set: عناصرِ یکتاتمرین
  • جمع‌بندی: چک‌لیستِ قطعیّت (نسخه‌ی اول)
۹

توابع II: variadic، closure، recursion و defer

۶ درس
  • closure، گرفتنِ متغیر و باگِ زنده‌ی حلقه در ۱.۱۶
  • تابعِ variadic: جمعِ هر تعداد عددتمرین
  • شمارنده با closureتمرین
  • فاکتوریل و فیبوناچی (بازگشت)تمرین
  • ترتیبِ اجرای defer (LIFO)تمرین
  • این کد آماده است: closure برای map/filter دستیتمرین
۱۰

اشاره‌گرها، new و سمانتیکِ مقدار/ارجاع

۶ درس
  • اشاره‌گرها در Go: & و *، بدونِ حسابِ اشاره‌گری
  • دو برابر کردن از طریقِ اشاره‌گرتمرین
  • تضادِ مقداری در برابر اشاره‌گریتمرین
  • جابه‌جاییِ دو مقدار با اشاره‌گرتمرین
  • این کد آماده است: new در برابر makeتمرین
  • ایست‌بازرسیِ فاز یک + پروژه‌ی کوچکِ مرور
۱۱

استراکت‌ها: مدل‌سازیِ داده

۶ درس
  • استراکت‌ها، literal‌ها و embedding
  • ساختنِ یک استراکتِ نقطه و چاپشتمرین
  • سازنده‌ی New و مقدارِ پیش‌فرضتمرین
  • استراکتِ تو در تو و دسترسی به فیلدتمرین
  • embedding: ترکیب به‌جای وراثتتمرین
  • این کد آماده است: ساختِ یک مدلِ دامنهتمرین
۱۲

متدها: رفتار به‌تایپ‌ها

۶ درس
  • متد چیست؟ receiverِ مقداری در برابر اشاره‌گری
  • این کد آماده است: تضادِ دو نوع receiverتمرین
  • مستطیل: Area (مقداری) و Scale (اشاره‌گری)تمرین
  • متد روی تایپِ غیراستراکتتمرین
  • حسابِ بانکی با متدِ اشاره‌گریتمرین
  • جمع‌بندی: method set و انتخابِ receiver
۱۳

اینترفیس‌ها، اینترفیسِ خالی و type switch

۷ درس
  • اینترفیس‌ها به‌صورت ضمنی ارضا می‌شوند
  • اینترفیسِ Shape با چند پیاده‌سازیتمرین
  • type switch روی اینترفیسِ خالیتمرین
  • type assertion با comma-okتمرین
  • Stringer سفارشی برای چاپِ خواناتمرین
  • مرتب‌سازیِ اسلایسِ Shape با sort.Interfaceتمرین
  • جمع‌بندی: اینترفیس‌هایی که در stdlib می‌بینی
۱۴

خطاها به‌عنوان مقدار: Is، As و wrapping

۶ درس
  • error یک مقدار است، نه یک exception
  • تقسیمِ امن با خطاتمرین
  • خطای sentinel و مقایسهتمرین
  • تایپِ خطای سفارشیتمرین
  • wrapping با %w و errors.Isتمرین
  • errors.As برای استخراجِ تایپتمرین
۱۵

panic، recover و مرزهای خطا

۶ درس
  • panic و recover: فقط برای موارد واقعاً استثنایی
  • این کد آماده است: recover یک panic را به error تبدیل می‌کندتمرین
  • تقسیمِ امن با recoverتمرین
  • دسترسیِ امن به اندیسِ اسلایستمرین
  • اعتبارسنجیِ ورودی با panic داخلی و recover بیرونیتمرین
  • ترتیبِ پاک‌سازیِ defer در حضورِ panicتمرین
۱۶

رشته‌ها، rune، byte و strconv

۶ درس
  • رشته‌ها UTF-8 هستند: byte در برابر rune
  • شمارشِ بایت در برابر شمارشِ runeتمرین
  • وارونه‌سازیِ رشته بر اساسِ runeتمرین
  • شمارشِ مصوت‌ها و بزرگ‌سازیتمرین
  • ساخت رشته با strings.Builderتمرین
  • تجزیه و فرمتِ عدد با strconvتمرین
۱۷

تسلط بر fmt، sort و bufio

۷ درس
  • فعل‌های fmt و خواندنِ stdin با bufio
  • اعشار با دقت‌های مختلفتمرین
  • خواندنِ توکن‌به‌توکن با ScanWordsتمرین
  • تراز و عرضِ ثابت در جدولتمرین
  • مرتب‌سازیِ اعداد و رشته‌هاتمرین
  • مرتب‌سازیِ سفارشی با sort.Slice (دو-کلیدی)تمرین
  • جست‌وجوی دودویی با sort.Searchتمرین
۱۸

هم‌روندیِ قطعی: goroutine، WaitGroup و channel

۶ درس
  • هم‌روندی + انضباطِ قطعیّت: هرگز از goroutine‌های رقیب چاپ نکن
  • این کد آماده است: fan-out قطعیِ درستتمرین
  • مربعِ موازی، نتیجه‌ی مرتبتمرین
  • جمعِ موازی با اسلایسِ نتایجتمرین
  • اشتباهاتِ رایجِ race (نشان‌داده، سپس اصلاح‌شده)
  • نگاشتِ موازیِ یک تابع روی اسلایستمرین
۱۹

channel، select، Mutex و sync

۶ درس
  • channel‌ها: ارتباط به‌سبکِ CSP
  • تولیدکننده/مصرف‌کننده با channel و closeتمرین
  • worker pool با نتایجِ مرتبتمرین
  • این کد آماده است: شمارنده‌ی مشترکِ امن با Mutexتمرین
  • select روی چند کانالِ کنترل‌شدهتمرین
  • sync.Once برای مقداردهیِ یک‌بارهتمرین
۲۰

کتابخانه‌ی استاندارد: math، time (ثابت)، bytes، regexp و json

۷ درس
  • stdlibِ امن: math، time با مقدارِ ثابت، bytes و regexp
  • گردکردن و توان با mathتمرین
  • تاریخِ ثابت: روزِ هفته و +۳۰ روزتمرین
  • regexp: استخراجِ همه‌ی اعدادتمرین
  • regexp: پوشاندنِ ارقامتمرین
  • json: unmarshal یک خط و چاپِ فیلدتمرین
  • json: ساختِ استراکت از stdin و Marshalتمرین
۲۱

تست، idiom‌ها و سازماندهیِ کد

۶ درس
  • تستِ table-driven به‌عنوان مفهوم
  • Go idiomatic: نام‌گذاری، early-return و سازماندهی
  • یک تابع، چند ورودی (سبکِ table)تمرین
  • getter بدونِ پیشوندِ Getتمرین
  • این کد آماده است: کدِ idiomatic در برابر غیرidiomaticتمرین
  • بازآراییِ کدِ تو در تو با early-returnتمرین
۲۲

پروژه‌های واقعی: ابزارهای متن و داده

۷ درس
  • معرفیِ کپ‌استون: از ابزارهای کوچک تا ابزارِ واقعی
  • اعتبارسنجِ پرانتزهاتمرین
  • کدگذار/کدگشای RLEتمرین
  • مبدلِ عددِ رومی (دوطرفه)تمرین
  • تحلیلگرِ بسامدِ کلمه (رتبه‌بندی‌شده)تمرین
  • گزارشِ فروش از CSV (متنی)تمرین
  • تحلیلگر و خلاصه‌سازِ لاگتمرین
۲۳

پروژه‌های واقعی: ماشین‌حساب‌ها، مفسرها و ماشین‌های حالت

۸ درس
  • معرفیِ کپ‌استونِ دوم: ساختنِ چیزهای زبان‌شکل
  • ماشین‌حسابِ RPN (پسوندی)تمرین
  • اعتبارسنجِ پیکربندیِ JSONتمرین
  • مبدلِ واحد (طول، جرم، دما)تمرین
  • ماشینِ حالتِ متناهی (چرخِ ورودی)تمرین
  • ارزیابِ عبارتِ میان‌وندی (با تقدم و پرانتز)تمرین
  • مفسرِ کوچکِ بایت‌کدِ پشته‌ایتمرین
  • جمع‌بندیِ کلِ دوره و چک‌لیستِ نهاییِ قطعیّت
شروع دوره

از همین امروز شروع کنید

درس‌های اول رایگان است و برای شروع پرداختی لازم نیست. هر وقت خواستید ادامه دهید، همین دوره را بخرید یا با اشتراک پرو همهٔ دوره‌ها را باز کنید.

این دوره شامل:
  • ۱۴۸ درس تعاملی
  • ۱۱۴ تمرین عملی
  • ۳۷ ساعت محتوای آموزشی
  • اجرای کد در مرورگر، بدون نصب
  • گواهی پایان دوره
  • دسترسی مادام‌العمر

نمونه‌ها را دوباره ببینید

رایگانبرای شروع

۱۲ درس ابتدایی رایگان است. برای ادامه، اشتراک بگیرید یا دوره را بخرید.

بدون نیاز به پرداخت مبلغی برای شروع

برای چه کسی

این دوره برای چه کسی است

  • برنامه‌نویس بک‌اند

    اگر می‌خواهید سرویس‌های سمت سرور سریع و ساده بنویسید.

  • برنامه‌نویس پایتون یا جاوااسکریپت

    اگر زبانی کامپایلی با نوع ایستا و هم‌روندی داخلی را به مهارت‌هایتان اضافه می‌کنید.

  • علاقه‌مند به زیرساخت

    اگر ابزار خط فرمان و برنامه‌های کمکی برای سرور و استقرار می‌نویسید.

پیش‌نیاز: یک رایانه و یک مرورگر.

بعد از این دوره

پرسش‌ها

پرسش‌های پرتکرار

زبان Go برای چه کاری مناسب است؟
Go بیشتر برای سرویس‌های سمت سرور، ابزارهای خط فرمان و برنامه‌هایی به کار می‌رود که چند کار را هم‌زمان انجام می‌دهند. ابزارهایی مثل Docker و Kubernetes با Go نوشته شده‌اند.
برای شروع این دوره باید برنامه‌نویسی بلد باشم؟
نه. دوره از اولین برنامه و دستور چاپ شروع می‌شود. اگر پیش‌تر با زبان دیگری کار کرده باشید، فصل‌های اول را سریع‌تر جلو می‌روید.
باید Go را روی رایانه‌ام نصب کنم؟
نه. کد را در مرورگر می‌نویسید و همان‌جا اجرا می‌شود. هر وقت خواستید روی رایانهٔ خودتان کار کنید، همین برنامه‌ها با دستور go run اجرا می‌شوند.
این دوره با کدام نسخهٔ Go است و جنریک‌ها را هم آموزش می‌دهد؟
تمرین‌ها با Go 1.16 اجرا می‌شوند. جنریک‌ها از نسخهٔ 1.18 به زبان اضافه شده‌اند و در این دوره نیستند. آنچه یاد می‌گیرید در نسخه‌های تازه‌تر هم بدون تغییر کار می‌کند.
هم‌روندی با goroutine را هم یاد می‌گیرم؟
بله. دو فصل به goroutine، WaitGroup، channel، select و Mutex می‌پردازد. تمرین‌ها طوری نوشته شده‌اند که خروجی هر بار یکسان باشد، پس درستی کد هم‌روند را می‌شود سنجید.
چند درس این دوره رایگان است؟
درس‌های ابتدایی دوره رایگان است و برای شروع پرداختی لازم نیست. تعداد دقیق آن‌ها کنار دکمهٔ شروع نوشته شده است.
در پایان دوره گواهی می‌گیرم؟
بله. وقتی همهٔ درس‌ها را تمام کنید، گواهی پایان دوره با یک شمارهٔ استعلام می‌گیرید که درستی آن در سایت قابل بررسی است.

همین امروز شروع کنید

اولین برنامهٔ Go خود را همین امروز در مرورگر اجرا کنید. شروع رایگان است و در کمتر از دو دقیقه وارد محیط یادگیری می‌شوید.

آموزش زبان Go (گولنگ) از صفر تا برنامه‌نویس — دینا کد