Полное руководство по использованию фреймворка GoWeb для серверной разработки
Добро пожаловать в официальную документацию фреймворка GoWeb. Этот фреймворк предназначен для создания высокопроизводительных и масштабируемых серверных приложений на языке Go.
wget https://goweb.alertweb.ru/framework_install.sh && bash framework_install.sh
goweb start
Начните быстрое создание вашего первого приложения с GoWeb.
goweb new myapp cd myapp
goweb run
Откройте браузер и перейдите по адресу http://localhost:8080 для просмотра вашего приложения.
Определите маршруты для вашего приложения в файле routes.go
:
func SetupRoutes(router *gin.Engine, cfg *internal.Config) { authGroup := router.Group("/auth") { authGroup.POST("/register", func(c *gin.Context) { if !cfg.Server.AllowPublicRegistration { c.JSON(403, gin.H{"error": "Public registration is disabled"}) return } controllers.Register(c) }) authGroup.POST("/login", controllers.Login) } }
Создавайте обработчики для различных маршрутов:
func GetAuditLogs(c *gin.Context) { var logs []models.AuditLog if err := models.DB.Order("created_at DESC").Limit(100).Find(&logs).Error; err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to retrieve audit logs"}) return } c.JSON(http.StatusOK, logs) }
Подключение к базе данных и выполнение запросов:
if err := models.DB.Save(&user).Error; err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to update user status"}) return }
Функция | Описание | Параметры | Возвращаемое значение |
---|---|---|---|
goweb.NewRouter() |
Создает новый экземпляр маршрутизатора. | Нет | Маршрутизатор |
router.GET(path, handler) |
Определяет маршрут для метода GET. | path : строка, handler : функция обработчик |
Нет |
goweb.JSON(w, status, data) |
Отправляет JSON-ответ. | w : http.ResponseWriter, status : код статуса, data : данные |
Нет |
router.Run(port) |
Запускает сервер на указанном порту. | port : строка (например, ":8080") |
Нет |
Пример создания простого REST API для управления пользователями:
// Создание пользователя router.POST("/users", func(w http.ResponseWriter, r *http.Request) { var user User if err := goweb.ParseJSON(r, &user); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } // Добавление пользователя в базу данных // ... goweb.JSON(w, http.StatusCreated, user) })
Добавление middleware для авторизации:
func AuthMiddleware() gin.HandlerFunc { return func(c *gin.Context) { // Получаем jwtKey из контекста jwtKey, exists := c.Get("jwtKey") if !exists { c.JSON(http.StatusInternalServerError, gin.H{"error": "JWT key not found"}) c.Abort() return } // Проверяем заголовок Authorization authHeader := c.GetHeader("Authorization") if authHeader == "" { c.JSON(http.StatusUnauthorized, gin.H{"error": "Authorization header is required"}) c.Abort() return } parts := strings.Split(authHeader, " ") if len(parts) != 2 || parts[0] != "Bearer" { c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid authorization format"}) c.Abort() return } // Проверяем токен token := parts[1] claims, err := utils.ValidateJWT(token, jwtKey.(string)) if err != nil { c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid token"}) c.Abort() return } // Добавляем userID и roleID в контекст c.Set("userID", claims.UserID) c.Set("roleID", claims.RoleID) // Продолжаем выполнение запроса c.Next() } }
database/sql
и драйверы, например, go-sql-driver/mysql
для MySQL.
Если у вас возникли вопросы или проблемы, свяжитесь с нашей командой поддержки: