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(..)에서 예외를 포착하고 반환하려면:
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!