Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mencipta Instance DB Singleton dengan Kaedah yang Dieksport dalam Go?

Bagaimana untuk Mencipta Instance DB Singleton dengan Kaedah yang Dieksport dalam Go?

Linda Hamilton
Linda Hamiltonasal
2024-11-02 09:04:03395semak imbas

How to Create a Singleton DB Instance with Exported Methods in Go?

Cara Membuat Instance DB Singleton dengan Kaedah yang Dieksport

Masalah

Kod yang diberikan tidak membenarkan kaedah untuk diakses pada contoh DB singleton . Pengguna menyasarkan untuk mentakrifkan kaedah dalam singleton dan memanggilnya pada rujukan tunggal mereka.

Penyelesaian

Untuk mencipta contoh DB tunggal dengan kaedah yang dieksport, ikut kod yang diubah suai ini:

<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
    // Add other methods
}

type manager struct {
    db *gorm.DB
}

var Mgr Manager

func init() {
    db, err := gorm.Open("sqlite3", "../articles.db")
    if err != nil {
        log.Fatal("Failed to init db:", err)
    }
    Mgr = &manager{db: db}
}

func (mgr *manager) AddArticle(article *article.Article) (err error) {
    mgr.db.Create(article)
    if errs := mgr.db.GetErrors(); len(errs) > 0 {
        err = errs[0]
    }
    return
}</code>

Menggunakan penyelesaian ini:

  • Antara muka Pengurus mentakrifkan kaedah yang dieksport yang boleh diakses oleh pelanggan.
  • Struktur pengurus melaksanakan antara muka.
  • Sebuah global yang dieksport pembolehubah Mgr jenis Pengurus dimulakan menggunakan fungsi init() untuk memastikan ia dilakukan sekali sahaja.
  • Pelanggan boleh menggunakan Mgr untuk memanggil kaedah pada contoh DB tunggal, seperti AddArticle.

Pengendalian Pengecualian

Untuk menangkap dan mengembalikan pengecualian daripada gorm.Create(), ubah suai kaedah AddArticle seperti berikut:

<code class="go">func (mgr *manager) AddArticle(article *article.Article) (err error) {
    if err := mgr.db.Create(article).Error; err != nil {
        return err
    }
    
    if errs := mgr.db.GetErrors(); len(errs) > 0 {
        return errs[0]
    }

    return nil
}</code>

Atas ialah kandungan terperinci Bagaimana untuk Mencipta Instance DB Singleton dengan Kaedah yang Dieksport dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn