برنامه‌نویسی تحت وب با Go

ایجاد شده توسط دکتر مصطفی جلیلی در آموزش برنامه نویسی گولنگ 19 آوریل 2025
اشتراک گذاری


برنامه‌نویسی تحت وب با Go


زبان Go به دلیل سادگی، سرعت و کتابخانه‌های داخلی قدرتمند، یکی از گزینه‌های محبوب برای ساخت وب‌سرویس‌ها و APIهای مقیاس‌پذیر است. در این بخش، با اصول اولیه ساخت وب‌اپلیکیشن در Go آشنا می‌شویم؛ از سرویس‌دهی ساده با net/http گرفته تا استفاده از فریم‌ورک‌هایی مثل Gin، اتصال به دیتابیس و پیاده‌سازی احراز هویت با JWT.




آشنایی با net/http


کتابخانه استاندارد net/http در Go ابزار اصلی برای ساخت وب‌سرورهاست. می‌تونید خیلی سریع یه سرور ساده راه‌اندازی کنید:


import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "سلام دنیا!")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}

در اینجا، هر بار که کاربر آدرس / رو باز می‌کنه، تابع handler اجرا می‌شه و متن "سلام دنیا!" رو نمایش می‌ده.




ساخت یک API ساده با Go


برای ساخت یک API، می‌تونید مسیرها (Routeها) رو تعریف کرده و پاسخ‌هایی با فرمت JSON ارسال کنید:


func apiHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.Write([]byte(`{"message": "این یک API ساده است"}`))
}
func main() {
http.HandleFunc("/api", apiHandler)
http.ListenAndServe(":8080", nil)
}



 Routing و Middleware دستی


اگر از فریم‌ورک استفاده نکنید، می‌تونید Routing رو دستی مدیریت کنید:


func main() {
http.HandleFunc("/home", homeHandler)
http.HandleFunc("/about", aboutHandler)
http.ListenAndServe(":8080", nil)
}

و برای پیاده‌سازی Middleware ساده مثلاً جهت بررسی لاگین یا ثبت لاگ، می‌تونید توابعی بنویسید که قبل از اجرای handler اجرا بشن:


func loggingMiddleware(next http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
fmt.Println("درخواست جدید:", r.URL.Path)
next(w, r)
}
}



استفاده از فریم‌ورک‌های وب مانند Gin یا Echo


اگر دنبال ساخت پروژه‌های بزرگ‌تر هستی، استفاده از فریم‌ورک‌هایی مثل Gin یا Echo پیشنهاد می‌شه.


مثال ساده با Gin:


import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{"message": "pong"})
})
r.Run(":8080")
}

این کد یه API ساده روی مسیر /ping ایجاد می‌کنه که جواب "pong" می‌ده.




 اتصال به دیتابیس با GORM یا sqlx


اتصال به PostgreSQL با GORM:


import (
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
func connectDB() *gorm.DB {
dsn := "host=localhost user=test password=1234 dbname=testdb port=5432 sslmode=disable"
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
panic("خطا در اتصال به دیتابیس")
}
return db
}

با GORM می‌تونید خیلی راحت ساختارهای struct رو به جدول‌های دیتابیس وصل کنید و عملیات CRUD انجام بدید.




پیاده‌سازی RESTful API با JWT Auth


برای محافظت از APIها، می‌تونید از توکن JWT استفاده کنید. بعد از لاگین موفق، سرور یک توکن به کاربر می‌ده و کاربر در درخواست‌های بعدی این توکن رو می‌فرسته.


مراحل کلی:




  1. نصب پکیج github.com/golang-jwt/jwt/v5




  2. تولید توکن:




token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"user_id": 123,
"exp": time.Now().Add(time.Hour * 72).Unix(),
})
tokenString, _ := token.SignedString([]byte("رمز_سری"))



  1. بررسی توکن در درخواست‌های بعدی (از طریق Header):




token, err := jwt.Parse(tokenStr, func(token *jwt.Token) (interface{}, error) {
return []byte("رمز_سری"), nil
})



با این ابزارها و مفاهیم، می‌تونید یه وب‌اپلیکیشن کامل با زبان Go بسازید، به دیتابیس وصل بشید، APIهای امن پیاده‌سازی کنید و اپلیکیشنی سریع و مقیاس‌پذیر بسازید.

نظرات (0)

اشتراک گذاری

این پست را با دیگران به اشتراک بگذارید

تنظیمات GDPR

When you visit any of our websites, it may store or retrieve information on your browser, mostly in the form of cookies. This information might be about you, your preferences or your device and is mostly used to make the site work as you expect it to. The information does not usually directly identify you, but it can give you a more personalized web experience. Because we respect your right to privacy, you can choose not to allow some types of cookies. Click on the different category headings to find out more and manage your preferences. Please note, that blocking some types of cookies may impact your experience of the site and the services we are able to offer.