我剛開始學習Go。當天的課程是將我的數據庫處理程序包裝在結構中以避免使用全局範圍變量。以爲我理解它到目前爲止,並希望延遲Close()方法,就像我以前那樣,以堆棧溢出結束。延遲結構sqlx.Close()以堆棧溢出結束
我找不到解釋爲什麼會發生這種情況,也沒有什麼解決方法。
這裏是關鍵代碼:
package exporter
type DB struct {
*sqlx.DB
queriesExecuted int
}
func Open(dataSourceName string) *DB {
connection := sqlx.MustConnect("mysql", dataSourceName)
db := &DB{connection, 0}
return db
}
func (db *DB) Close() {
db.Close() // this is where the stack growth happens
}
func (db *DB) GetArticles() []oxarticle {
...
}
package main
func main() {
exporter := feedexporter.Open("root:[email protected]/feedexport")
defer exporter.Close()
articles := exporter.GetArticles()
}
一切正常,無延遲exporter.Close(),包括它結束在:
runtime: goroutine stack exceeds 1000000000-byte limit
fatal error: stack overflow
感覺如此不好關閉連接;)處理這個問題的方法是什麼?