現(xiàn)在,這適用于測(cè)試數(shù)據(jù)庫(kù),但在有數(shù)百萬(wàn)行的生產(chǎn)數(shù)據(jù)庫(kù)中,它在獲取 1,000 行后卡住并停止在屏幕上打印。我讓它運(yùn)行了一夜。早上,我發(fā)送了QUIT信號(hào)并得到以下堆棧跟蹤SIGQUIT: quitPC=0x5fecb m=0goroutine 0 [idle]:runtime.mach_semaphore_wait(0xe03, 0x0, 0x0, 0x0, 0x0, 0x407520, 0x52db9, 0xffffffffffffffff, 0x0, 0x7fff5fbff0fc, ...) /usr/local/Cellar/go/1.5/libexec/src/runtime/sys_darwin_amd64.s:407 +0xbruntime.semasleep1(0xffffffffffffffff, 0x0) /usr/local/Cellar/go/1.5/libexec/src/runtime/os1_darwin.go:385 +0xe5runtime.semasleep.func1() /usr/local/Cellar/go/1.5/libexec/src/runtime/os1_darwin.go:401 +0x29runtime.systemstack(0x7fff5fbff100) /usr/local/Cellar/go/1.5/libexec/src/runtime/asm_amd64.s:278 +0xabruntime.semasleep(0xffffffffffffffff, 0x0) /usr/local/Cellar/go/1.5/libexec/src/runtime/os1_darwin.go:402 +0x36runtime.notesleep(0x407970) /usr/local/Cellar/go/1.5/libexec/src/runtime/lock_sema.go:169 +0x100runtime.stopm() /usr/local/Cellar/go/1.5/libexec/src/runtime/proc1.go:1128 +0x112runtime.findrunnable(0xc82001d500, 0x0) /usr/local/Cellar/go/1.5/libexec/src/runtime/proc1.go:1530 +0x69eruntime.schedule() /usr/local/Cellar/go/1.5/libexec/src/runtime/proc1.go:1639 +0x267runtime.park_m(0xc820000180) /usr/local/Cellar/go/1.5/libexec/src/runtime/proc1.go:1698 +0x18bruntime.mcall(0x7fff5fbff280) /usr/local/Cellar/go/1.5/libexec/src/runtime/asm_amd64.s:204 +0x5b問(wèn)題:為什么它在獲取 1,000(appox) 行后立即卡???注釋掉如何defer rows.Close()立即停止卡住和恐慌?有沒(méi)有更好的方法來(lái)編寫(xiě)這個(gè)程序?最后,如果以上這些是愚蠢的問(wèn)題或問(wèn)題太長(zhǎng),我很抱歉。我是 Go 的新手,正在努力學(xué)習(xí)。
1 回答

一只萌萌小番薯
TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊
這是驅(qū)動(dòng)程序的問(wèn)題。通過(guò)刪除延遲調(diào)用并檢查數(shù)組邊界來(lái)修復(fù)它。
- 1 回答
- 0 關(guān)注
- 328 瀏覽
添加回答
舉報(bào)
0/150
提交
取消