Création d'une instance de base de données Singleton avec des méthodes
Le code d'origine fourni contient une implémentation singleton, mais manque de méthodes pouvant être appelées sur l'instance singleton . Cet article montre comment augmenter le singleton fourni avec des méthodes et répond aux questions liées à la gestion des erreurs.
Implémentation révisée de Singleton avec des méthodes
Dans le code mis à jour, nous définissons un exporté l'interface Manager avec les méthodes souhaitées (AddArticle dans ce cas). Nous créons ensuite un gestionnaire de types d'implémentation non exporté. Une variable globale Mgr de type interface est initialisée dans une fonction package init(), garantissant qu'elle n'est instanciée qu'une seule fois.
<code class="go">package dbprovider import ( "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/sqlite" "rest/article" "log" ) type Manager interface { AddArticle(article *article.Article) error } type manager struct { db *gorm.DB } var Mgr Manager // Global variable of the interface type func init() { db, err := gorm.Open("sqlite3", "../articles.db") if err != nil { log.Fatal("Failed to initialize database:", err) } Mgr = &manager{db: db} } func (mgr *manager) AddArticle(article *article.Article) error { if err := mgr.db.Create(article).Error; err != nil { return err } return nil }</code>
Utilisation du Singleton
Le L'instance Mgr peut désormais être utilisée pour ajouter des articles à la base de données :
<code class="go">import "dbprovider" if err := dbprovider.Mgr.AddArticle(someArticle); err != nil { // Handle error }</code>
Gestion des erreurs
Pour intercepter et renvoyer les exceptions de gorm.Create(), nous vérifions l'erreur renvoyée par gorm.Create().Error. Si une erreur s'est produite, elle est renvoyée ; sinon, nul est renvoyé.
Conclusion
Cette implémentation révisée crée une instance de base de données singleton avec des méthodes qui peuvent être appelées sur la référence singleton. Il montre également comment gérer les exceptions de gorm.Create().
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!