Let's Go پیکربندی و مدیریت خطا › جداسازی مسیرهای برنامه (Isolating Application Routes)
قبلی · فهرست · بعدی
فصل 3.5.

جداسازی مسیرهای برنامه (Isolating Application Routes)

در حالی که در حال بازسازی کد خود هستیم، یک تغییر دیگر هم ارزش انجام دادن دارد.

تابع main() ما شروع به شلوغ شدن کرده است، بنابراین برای اینکه آن را واضح و متمرکز نگه داریم، می‌خواهم اعلان‌های مسیر برای برنامه را به یک فایل مستقل routes.go منتقل کنم، به این صورت:

$ touch cmd/web/routes.go
File: cmd/web/routes.go
package main

import "net/http"

// The routes() method returns a servemux containing our application routes.
func (app *application) routes() *http.ServeMux {
    mux := http.NewServeMux()

    fileServer := http.FileServer(http.Dir("./ui/static/"))
    mux.Handle("GET /static/", http.StripPrefix("/static", fileServer))

    mux.HandleFunc("GET /{$}", app.home)
    mux.HandleFunc("GET /snippet/view/{id}", app.snippetView)
    mux.HandleFunc("GET /snippet/create", app.snippetCreate)
    mux.HandleFunc("POST /snippet/create", app.snippetCreatePost)

    return mux
}

سپس می‌توانیم فایل main.go را به این صورت به‌روزرسانی کنیم:

File: cmd/web/main.go
package main

...

func main() {
    addr := flag.String("addr", ":4000", "HTTP network address")
    flag.Parse()

    logger := slog.New(slog.NewTextHandler(os.Stdout, nil))

    app := &application{
        logger: logger,
    }

    logger.Info("starting server", "addr", *addr)
    
    // Call the new app.routes() method to get the servemux containing our routes,
    // and pass that to http.ListenAndServe().
    err := http.ListenAndServe(*addr, app.routes())
    logger.Error(err.Error())
    os.Exit(1)
}

این بسیار مرتب‌تر است. مسیرهای برنامه ما اکنون در متد app.routes() جدا و کپسوله شده‌اند و مسئولیت‌های تابع main() ما محدود به موارد زیر است:

واژه‌نامه اصطلاحات فنی

اصطلاح فارسی معادل انگلیسی توضیح
جداسازی مسیرهای برنامه Isolating Application Routes فرآیند جداسازی و سازماندهی مسیرهای برنامه در یک فایل مستقل
مسیرهای برنامه Application Routes تعاریف مسیرهای HTTP و هندلرهای مرتبط با آنها
تنظیمات پیکربندی زمان اجرا Runtime Configuration Settings تنظیمات برنامه که در زمان اجرا قابل تغییر هستند
وابستگی‌ها Dependencies اجزای مورد نیاز برنامه مانند لاگرها و اتصالات پایگاه داده
سرور HTTP HTTP Server برنامه‌ای که درخواست‌های HTTP را دریافت و پردازش می‌کند
کپسوله‌سازی Encapsulation مخفی کردن جزئیات پیاده‌سازی و ارائه یک رابط مشخص
مسئولیت‌ها Responsibilities وظایف و کارهایی که هر بخش از کد انجام می‌دهد
فایل مستقل Independent File فایلی که مسئولیت مشخص و مستقلی دارد
هندلر Handler تابع یا متدی که درخواست‌های HTTP را پردازش می‌کند
سرور فایل File Server سیستمی که فایل‌های استاتیک را به مرورگر ارائه می‌دهد