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
Lepaskan: 2024-11-02 09:04:03
asal
401 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan