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

Bagaimana untuk Mencipta Instance DB Singleton dengan Kaedah dalam Go?

DDD
Lepaskan: 2024-11-01 11:43:29
asal
414 orang telah melayarinya

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

Buat jenis yang tidak dieksport yang melaksanakan antara muka:

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

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

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

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

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

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan