Как исправить ошибку с CORS No ‘Access-Control-Allow-Origin’ Go, Gin?

Ошибка "CORS No 'Access-Control-Allow-Origin'" возникает, когда клиент (браузер) отправляет запрос на сервер, а сервер не разрешает доступ к ресурсам из другого источника из-за политики same-origin. Это мера безопасности, которая предотвращает несанкционированный доступ к ресурсам сервера.

Для исправления ошибки с CORS в фреймворке Gin мы можем использовать пакет github.com/gin-contrib/cors. Этот пакет добавляет необходимые заголовки Access-Control-Allow-Origin к ответам сервера, чтобы разрешить доступ к ресурсам из других источников.

Для начала установим пакет с помощью команды go get:

go get github.com/gin-contrib/cors

Затем импортируем пакет в нашем приложении:

import (
    "github.com/gin-gonic/gin"
    "github.com/gin-contrib/cors"
)

Используем пакет cors, чтобы добавить middleware в наше приложение:

func main() {
    r := gin.Default()

    config := cors.DefaultConfig()
    config.AllowOrigins = []string{"http://example.com"} // Укажите свой домен здесь
    r.Use(cors.New(config))

    // Здесь ваш код обработки запросов
    
    r.Run(":8080")
}

В этом примере мы использовали config.AllowOrigins для разрешения доступа только с домена http://example.com. Вы можете изменить значение на свой домен или использовать "*" для разрешения доступа с любых доменов.

После добавления этого middleware, каждый ответ от сервера будет содержать заголовок Access-Control-Allow-Origin со значением домена, указанного в config.AllowOrigins, что позволит браузеру клиента получать доступ к ресурсам с этого домена.

Кроме того, пакет cors предоставляет и другие настройки, такие как разрешение запросов с разных методов (GET, POST, PUT и т.д.), разрешение отправки куки (config.AllowCredentials) и другие. Вы можете ознакомиться с документацией пакета, чтобы узнать больше о доступных настройках и их использовании.

Обратите внимание, что важно подключать middleware cors перед обработчиками маршрутов, чтобы заголовки CORS были добавлены до обработки запросов.