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

Go의 메소드를 사용하여 싱글톤 DB 인스턴스를 생성하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-01 11:43:29313검색

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

메서드가 포함된 싱글톤 DB 인스턴스

Go에서 메서드가 포함된 싱글톤을 생성하려면 내보내지 않은 구현 유형과 내보낸 인터페이스를 활용하면 됩니다.

인터페이스 및 패키지 초기화 사용

다음과 같이 원하는 방법으로 내보낸 인터페이스를 정의합니다.

<code class="go">package dbprovider

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

인터페이스를 구현하는 내보내지 않은 유형을 만듭니다.

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

패키지 참조 전에 한 번 실행되는 패키지 초기화 함수에서 싱글톤 인스턴스를 초기화합니다.

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

싱글톤 사용

내보낸 인터페이스 변수를 참조하여 싱글톤 인스턴스를 사용합니다. :

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

gorm.Create(..)의 예외 처리

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>

대안 접근 방식

패키지 초기화 기능을 사용하는 대신 싱글톤을 명시적으로 초기화할 수도 있습니다.

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

이 접근 방식을 사용하면 사용자가 공유 인스턴스를 사용할지 아니면 새 인스턴스를 생성할지 결정할 수 있습니다. 예를 들어 테스트 목적으로.

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

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