- پلتفرم: Udemy
- مدرس: Rajan Lagah
- امتیاز: 4.7/5
- مدت زمان: 03:10:06
- آخرین بهروزرسانی: March 2025
- لینک دوره: Golang Web Development: Create Powerful Servers with Golang
این داکیومنت خلاصه نکات اصلی دوره است. اگه فرصت داری، دیدن کامل خود دوره خیلی توصیه میشه.
Teach Me: 5 Years Old | Beginner | Intermediate | Advanced | (reset auto redirect)
Learn Differently: Analogy | Storytelling | Cheatsheet | Mindmap | Flashcards | Practical Projects | Code Examples | Common Mistakes
Check Understanding: Generate Quiz | Interview Me | Refactor Challenge | Assessment Rubric | Next Steps
راجان اول دوره توضیح میده چرا خیلی از شرکتهای بزرگ دارن میرن سمت Go: سریع و کممصرفه، و برای ساخت سرویسهای backend مقیاسپذیر عالیه. یک نقشه راه کلی هم میده: از یک سرور خیلی ساده با Go شروع میکنی، بعد میری سراغ Gin برای routing بهتر، از Docker + PostgreSQL استفاده میکنی، یک سری CRUD API کامل میسازی، Google OAuth + JWT Auth اضافه میکنی و در نهایت همهچیز رو با در نظر گرفتن CI/CD روی AWS دیپلوی میکنی.
مثال: آخر دوره یک API مدیریت Task خواهی داشت که روی AWS ران میشه، با Google Login کاربر را لاگین میکنه و به یک دیتابیس واقعی روی Cloud وصل میشه.
یاد میگیری چطور Go (نسخه 1.23 به بالا) رو نصب کنی، GOPATH رو تنظیم کنی و با استفاده از پکیج استاندارد net/http در حدود ۱۵ خط، یک سرور «hello world» خیلی ساده بسازی.
مثال:
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "OK")
})
log.Fatal(http.ListenAndServe(":8080", nil))
}Ask AI: Installing Go and first server
راجان net/http خام رو با Gin مقایسه میکنه و نشون میده چرا برای پروژههای واقعی Gin انتخاب بهتریه: لاگگیری خودکار، ساخت JSON Response راحت، validation توکار، پشتیبانی از middleware، گروهبندی routeها و پرفورمنس بهتر.
مثال:
r := gin.Default()
r.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{"message": "OK"})
})
r.Run(":8080")هیچوقت Secretهات رو hard-code نکن! اینجا با godotenv کار میکنی تا مقادیر رو از فایل .env بخونی و یک پکیج config تمیز بسازی که فقط یکبار موقع start شدن برنامه (مثلاً داخل init()) لود بشه.
مثال:
APP_PORT=8080
DB_PATH=postgres://postgres:adminpassword@localhost:5433/tasks?sslmode=disableAsk AI: Environment variables in Go
میبینی چرا Docker برای دیتابیس لوکال خیلی ایدهآله (نسخههای مختلف، پاک کردن ساده، ایزوله بودن و ...). راجان یک docker-compose.yml آماده میده که PostgreSQL 16 رو بالا میآره و دیتابیس tasks رو برات میسازه.
مثال:
services:
postgres:
image: postgres:16.3
container_name: postgres
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: adminpassword
POSTGRES_DB: tasks
ports:
- "5433:5432"Ask AI: Docker PostgreSQL for Go
دیگه لازم نیست بعد هر تغییری سرور رو دستی ریستارت کنی. air رو نصب میکنی و هر بار فایل رو Save کنی، سرور خودش ریستارت میشه.
مثال (دستور ترمینال):
air
# → Server بعد از هر ذخیره، خودکار ریستارت میشودAsk AI: Live reload Go with Air
Route مربوط به POST /tasks رو میسازی، از binding و tagهای Gin برای validation استفاده میکنی، با golang-migrate migration مینویسی و queryها رو در یک لایه repository جدا نگه میداری.
مثال validation:
type CreateTaskPayload struct {
Title string `json:"title" binding:"required,max=100"`
Description string `json:"description" binding:"required,max=1000"`
}Ask AI: CRUD Create and validation Gin
باقی عملیات CRUD را هم کامل میکنی: گروهبندی routeها، استفاده از query parameterها، پیادهسازی PATCH برای آپدیت جزئی فیلدها و نوشتن متدهای تمیز در لایه repository.
مثال payload آپدیت:
type UpdateTaskPayload struct {
ID int `json:"id" binding:"required"`
Title *string `json:"title" binding:"omitempty,max=100"`
Description *string `json:"description" binding:"omitempty,max=1000"`
}Ask AI: CRUD Read Update Delete Gin
یک پروژه تو Google Cloud میسازی، endpointهای /login/google و /callback/google رو پیاده میکنی، code رو با token عوض میکنی، اطلاعات کاربر رو میگیری و در نهایت یک JWT با انقضای ۲۴ ساعته برای کاربر sign میکنی.
مثال ساخت JWT:
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"email": user.Email,
"name": user.Name,
"exp": time.Now().Add(time.Hour * 24).Unix(),
})
tokenString, _ := token.SignedString([]byte(config.JWT_SECRET))یک middleware قابلاستفادهی مجدد مینویسی که header مربوط به Authorization: Bearer <token> رو میخونه، JWT رو verify میکنه و اگر token نامعتبر یا منقضی باشه با status 403 درخواست رو رد میکنه.
مثال middleware:
func AuthMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
tokenString := c.GetHeader("Authorization")
if tokenString == "" || !strings.HasPrefix(tokenString, "Bearer ") {
c.AbortWithStatusJSON(403, gin.H{"error": "Unauthorized"})
return
}
// ...parse and verify token
c.Next()
}
}AWS CLI رو نصب میکنی، یک IAM User با سطح دسترسی محدود میسازی، با eb init و eb deploy اپلیکیشن رو روی Elastic Beanstalk دیپلوی میکنی، یک Procfile تعریف میکنی، به RDS PostgreSQL (داخل VPC خصوصی) وصل میشی و migrationها رو روی محیط Production اجرا میکنی.
مثال Procfile:
web: bin/application
Ask AI: Deploy Go to AWS Elastic Beanstalk RDS
من Ali Sol هستم، Backend Developer. برای آشنایی بیشتر:
- وبسایت: alisol.ir
- لینکدین: linkedin.com/in/alisolphp