Как сделать bulk insert в GORM?

В библиотеке GORM, которая служит ORM (Object-Relational Mapping) для языка программирования Go, есть несколько способов выполнить bulk insert операцию. Рассмотрим каждый способ более подробно:

Способ 1: Создание среза объектов для вставки
-----------------------------------------------
Первый способ заключается в создании среза объектов и использовании метода Create для массовой вставки. В этом случае каждый объект добавляется в срез и затем передается методу Create.

type User struct {
    ID   uint
    Name string
    Age  uint
}

func bulkInsert(users []User) error {
    db := // инициализация GORM DB
    
    return db.Create(&users).Error
}

В приведенном примере мы создаем структуру User и передаем срез объектов users методу Create. GORM выполняет bulk insert, вставляя все объекты одним запросом.

Способ 2: Использование Raw SQL
------------------------------
Второй способ состоит в использовании сырого SQL-запроса для выполнения bulk insert операции.

func bulkInsert(users []User) error {
    db := // инициализация GORM DB
    
    var valueStrings []string
    var valueArgs []interface{}
    
    for _, user := range users {
        valueStrings = append(valueStrings, "(?, ?, ?)")
        valueArgs = append(valueArgs, user.Name, user.Age)
    }
    
    query := fmt.Sprintf("INSERT INTO users (name, age) VALUES %s", strings.Join(valueStrings, ","))
    
    return db.Exec(query, valueArgs...).Error
}

В этом случае мы создаем сырой SQL-запрос, вставляя значения в необходимом формате в запрос. Затем мы выполняем запрос с помощью метода Exec.

Оба этих метода позволяют выполнить массовую вставку в базу данных с использованием GORM. Выбор способа зависит от ваших предпочтений и требований проекта. В первом способе мы используем ORM и работаем с объектами, тогда как во втором способе мы напрямую обращаемся к базе данных с помощью сырого SQL.