# #go #replication #go-gorm
Вопрос:
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
"server/config"
"gorm.io/plugin/dbresolver"
)
func DB(config *config.Config) {
var err error
config.DB, err = gorm.Open("mysql", config.DBDSN)
if err != nil {
panic(err)
}
if !config.IsDev {
config.DB.Use(dbresolver.Register(dbresolver.Config{
Replicas: []gorm.Dialector{mysql.Open("mysql", config.DBDSN2)},
}))
}
}
Я пытаюсь использовать DBresolver от GORM, чтобы использовать реплику чтения моего экземпляра облачного SQL. Я думаю, что есть некоторые проблемы с управлением версиями пакета GORM, который я использую, и плагина DBresolver. Когда я запускаю приведенный выше код, я получаю следующую ошибку:
- config.DB.Используйте неопределенный (тип *»github.com/jinzhu/gorm».БД не имеет поля или метода использования)
- не определено: «github.com/jinzhu/gorm».Диалект
Я не смог найти никакой причины для этого в Интернете, и существует очень мало онлайн-ресурсов, посвященных расширенным функциям GORM. Я могу легко заставить реплику работать, если создам к ней отдельное соединение, но таким образом мне нужно указывать базу данных каждый раз, когда я взаимодействую с базой данных. Я использовал следующее для реализации приведенного выше кода: https://gorm.io/docs/dbresolver.html
Ответ №1:
Вы используете путь импорта v1 для gorm, но DBResolver-это функция V2. Вы захотите вместо этого использовать:
"gorm.io/gorm"
для основного пакета импорта"gorm.io/driver/mysql"
для импорта драйвераgorm.Open
сmysql.Open
помощью для создания соединений.- Версия V2 в основном обратно совместима, но вам нужно будет убедиться, что любой старый код протестирован для работы в новой версии.
import (
"gorm.io/gorm"
"gorm.io/driver/mysql"
"gorm.io/plugin/dbresolver"
"server/config"
)
func DB(config *config.Config) {
var err error
config.DB, err := gorm.Open(mysql.Open(config.DBDSN), amp;gorm.Config{})
if err != nil {
panic(err)
}
if !config.IsDev {
config.DB.Use(dbresolver.Register(dbresolver.Config{
Replicas: []gorm.Dialector{mysql.Open("mysql", config.DBDSN2)},
}))
}
}
Комментарии:
1. Спасибо! Я заставил это работать. Вы правы насчет обратной совместимости в большинстве случаев. Мне действительно нужно изменить несколько методов, таких как, например, gorm.Scope.