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

Bagaimana untuk Mencipta Instance DB Singleton dengan Kaedah dalam Go?

DDD
DDDasal
2024-11-01 11:43:29313semak imbas

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

Singleton DB Instance with Methods

Mencipta singleton dengan kaedah dalam Go boleh dicapai dengan menggunakan jenis pelaksana yang tidak dieksport dan antara muka yang dieksport.

Menggunakan Antara Muka dan Permulaan Pakej

Tentukan antara muka yang dieksport dengan kaedah yang diingini, seperti:

<code class="go">package dbprovider

type Manager interface {
    AddArticle(article *article.Article) error
}</code>

Buat jenis yang tidak dieksport yang melaksanakan antara muka:

<code class="go">type manager struct {
    db *gorm.DB
}</code>

Memulakan tika tunggal dalam fungsi permulaan pakej, yang dilaksanakan sekali sebelum sebarang rujukan pakej:

<code class="go">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}
}</code>

Menggunakan Singleton

Gunakan tika tunggal dengan merujuk kepada pembolehubah antara muka yang dieksport, mis. :

<code class="go">if err := dbprovider.Mgr.AddArticle(someArticle); err != nil {
    // Handle error
}</code>

Pengendalian Pengecualian dalam gorm.Create(..)

Untuk menangkap dan mengembalikan pengecualian daripada gorm.Create(..):

<code class="go">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>

Alternatif Pendekatan

Daripada menggunakan fungsi permulaan pakej, anda juga boleh memulakan singleton secara eksplisit:

<code class="go">var mgr = newManager()

func newManager() Manager {
    db, err := gorm.Open("sqlite3", "../articles.db")
    if err != nil {
        log.Fatal("Failed to init db:", err)
    }
    return &manager{db: db}
}</code>

Pendekatan ini membolehkan pengguna memutuskan sama ada untuk menggunakan contoh yang dikongsi atau mencipta yang baharu, cth. untuk tujuan ujian.

Atas ialah kandungan terperinci Bagaimana untuk Mencipta Instance DB Singleton dengan Kaedah 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