>  기사  >  백엔드 개발  >  Go에서 내보낸 메서드를 사용하여 싱글톤 DB 인스턴스를 생성하는 방법은 무엇입니까?

Go에서 내보낸 메서드를 사용하여 싱글톤 DB 인스턴스를 생성하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-02 09:04:03387검색

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

내보낸 메서드를 사용하여 싱글톤 DB 인스턴스를 생성하는 방법

문제

제공된 코드로 인해 싱글톤 DB 인스턴스에서 메서드에 액세스할 수 없습니다. . 사용자는 싱글톤에서 메서드를 정의하고 싱글톤 참조에서 이를 호출하는 것을 목표로 합니다.

해결책

내보낸 메서드를 사용하여 싱글톤 DB 인스턴스를 생성하려면 다음 수정된 코드를 따르세요.

<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>

이 솔루션 사용:

  • Manager 인터페이스는 클라이언트가 액세스할 수 있는 내보낸 메서드를 정의합니다.
  • 관리자 구조체는 인터페이스를 구현합니다.
  • 내보낸 전역 Manager 유형의 Mgr 변수는 init() 함수를 사용하여 초기화되어 한 번만 수행되도록 합니다.
  • 클라이언트는 Mgr을 사용하여 AddArticle과 같은 싱글톤 DB 인스턴스의 메서드를 호출할 수 있습니다.

예외 처리

gorm.Create()에서 예외를 포착하고 반환하려면 다음과 같이 AddArticle 메서드를 수정하세요.

<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>

위 내용은 Go에서 내보낸 메서드를 사용하여 싱글톤 DB 인스턴스를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.