پرش به محتوای اصلی

نمونهٔ کامپوننت‌ها

همهٔ عناصر نگارشی و کامپوننت‌های درس‌ها در یک صفحه، برای بازبینی ظاهر سایت پیش از شروع درس‌ها.

زمان مطالعه: ۱۱ دقیقه
در این صفحه

نگارش پایه

این صفحه نشان می‌دهد متن درس‌ها چطور دیده می‌شود. متن فارسی با قلم وزیرمتن و فاصلهٔ خطوط راحت نوشته می‌شود و اصطلاح‌های فنی مثل goroutine، slice و interface به انگلیسی می‌مانند. کد درون‌خطی مثل append(s, 1) یا len(s) همیشه چپ‌به‌راست است، حتی وسط جملهٔ فارسی.

متن می‌تواند پررنگ باشد و به صفحهٔ آموزش یا به یک منبع بیرونی (پیوند بیرونی) پیوند بدهد. کلیدهای صفحه‌کلید هم این‌طور نمایش داده می‌شوند: Ctrl + K.

متن ترکیبی فارسی و انگلیسی

دستور go test -race ./... را اجرا کنید. زبان‌هایی مثل C++ و C# هم شناخته می‌شوند. فایل .gitignore، پرچم -race و بستهٔ golang.org/x/sync@latest درست و خوانا نمایش داده می‌شوند، حتی وقتی جمله با یک واژهٔ انگلیسی تمام شود: goroutine.

Go زبانی است که جمله می‌تواند با نام آن شروع شود و ترتیب واژه‌ها به هم نمی‌ریزد. نسخهٔ 1.27.4، بازهٔ 3 تا 5 goroutine و عبارت‌هایی مثل CI/CD، net/http و key=value هم درست دیده می‌شوند.

فهرست‌ها

  • در Go هر متغیر یک zero value دارد.
  • خطا یک مقدار معمولی است، نه exception.
  • ترکیب (composition) جای وراثت را می‌گیرد.
  1. کد را بنویسید.
  2. با go vet بررسی کنید.
  3. تست‌ها را با go test -race اجرا کنید.

نقل قول

Clear is better than clever.

از Go Proverbs

جدول ساده

مفهومGoPython
آرایهٔ پویا[]intlist[int]
نگاشتmap[string]intdict[str, int]
مقدار تهیnilNone

بلوک کد

بلوک کد عنوان فایل، برچسب زبان، دکمهٔ کپی و برجسته‌سازی خط دارد. رنگ‌آمیزی در زمان build انجام می‌شود و هیچ JavaScript اضافه‌ای به مرورگر نمی‌فرستد.

main.goGo
package main

import "fmt"

func main() {
	scores := []int{10, 20, 30}
	scores = append(scores, 40)
	fmt.Println(len(scores), cap(scores))
	fmt.Println(scores)
}

شمارهٔ خط هم قابل نمایش است:

main.pyPython
scores: list[int] = [10, 20, 30]
scores.append(40)
print(len(scores))
print(scores)

زبان‌های دیگر هم پشتیبانی می‌شوند:

query.sqlSQL
SELECT id, title, created_at
FROM tasks
WHERE done = false
ORDER BY created_at DESC
LIMIT 10;
DockerfileDockerfile
FROM golang:1.27 AS build
WORKDIR /src
COPY . .
RUN CGO_ENABLED=0 go build -o /bin/app ./cmd/app

FROM gcr.io/distroless/static-debian12
COPY --from=build /bin/app /app
ENTRYPOINT ["/app"]

کد از فایل واقعی مخزن

این بلوک متنش را مستقیم از فایل code/go/go.mod می‌خواند. درس‌ها کدهایشان را به همین روش از پوشهٔ code می‌گیرند تا متن درس همیشه با کد تست‌شده یکی بماند.

go.modGo
module github.com/alifreeguy/go-for-python-developers/code/go

go 1.27.0

toolchain go1.27.4

مقایسهٔ Go و Python

در صفحهٔ عریض دو کد کنار هم دیده می‌شوند و در موبایل به شکل دو زبانه.

sum.goGo
package main

import "fmt"

func Sum(numbers []int) int {
	total := 0
	for _, number := range numbers {
		total += number
	}
	return total
}

func main() {
	fmt.Println(Sum([]int{1, 2, 3}))
}
موضوعGoPython
نوع‌دهیایستا، بررسی در زمان کامپایلپویا، type hint اختیاری
مدیریت خطامقدار بازگشتی errortry و except
هم‌روندیgoroutine و channelasyncio، thread و process
خروجی نهایییک فایل اجرایی مستقلکد منبع و مفسر
جدول مقایسه با ستون‌های رنگی Go و Python

ترمینال

bash
$ go run .4 6[10 20 30 40]$ go test -race ./...ok      example.com/scores      1.013s

کادرهای توجه

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

تصویرهای مفهومی به شکل SVG اختصاصی ساخته می‌شوند و با تم روشن و تیره هماهنگ هستند.

ساختار درونی sliceیک slice header با سه فیلد ptr، len برابر ۳ و cap برابر ۵ که به یک آرایهٔ پشتیبان با پنج خانه اشاره می‌کند؛ سه خانهٔ اول پر و دو خانهٔ آخر ظرفیت خالی است.slice headerptrlen = 3cap = 5backing array10020130234len = 3cap = 5
ساختار درونی slice: یک header با سه فیلد که به آرایهٔ پشتیبان اشاره می‌کند

نمودارهای جریان با Mermaid رسم می‌شوند و از تم فعلی پیروی می‌کنند:

در حال رسم نمودار…

گام‌ها

  1. نصب وابستگی‌ها

    همهٔ ابزارها با یک دستور نصب می‌شوند:

    Bash
    make setup
  2. اجرای سایت

    سایت در حالت توسعه بالا می‌آید و با هر تغییر به‌روز می‌شود.

  3. حل تمرین

    فایل exercise.go را کامل کنید و تست‌ها را اجرا کنید.

تمرین

تمرین: جمع عددهای یک slice

GoPythonEasy

تابعی بنویسید که مجموع عددهای یک slice را برگرداند. برای slice خالی باید صفر برگردد.

کد شروع

exercise.goGo
package exercises

func Sum(numbers []int) int {
	return 0
}
اجرای تست‌ها:make exercise PHASE=01 LESSON=07

تمرین: حذف عنصرهای تکراری

GoMedium

تابعی بنویسید که عنصرهای تکراری یک slice را حذف کند و ترتیب اولین دیده‌شدن را نگه دارد.

اجرای تست‌ها:make exercise PHASE=01 LESSON=07

تمرین: پیاده‌سازی ring buffer

GoHard

یک ring buffer با ظرفیت ثابت بسازید که بدون تخصیص حافظهٔ تازه کار کند.

اجرای تست‌ها:make exercise PHASE=01 LESSON=07

تمرین: تحلیل رشد ظرفیت

GoPythonSenior Challenge

با benchmark نشان دهید پیش‌تخصیص ظرفیت با make چه اثری بر تعداد تخصیص‌ها دارد و نتیجه را با list در Python مقایسه کنید.

اجرای تست‌ها:make exercise PHASE=01 LESSON=07

آزمون

آزمون

۰ از ۳ پاسخ داده شده
  1. ۱.مقدار len(s) برای s := make([]int, 2, 5) چیست؟

  2. ۲.متغیر var count int که مقداردهی نشده چه مقداری دارد؟

  3. ۳.یک نوع در Go چطور یک interface را پیاده‌سازی می‌کند؟

به همهٔ پرسش‌ها پاسخ دهید تا نتیجه را ببینید.

ناوبری درس

ویرایش این صفحه در GitHub