【发布时间】:2022-10-04 23:36:41
【问题描述】:
我最近修改了我的应用程序,发现测试开始挂起。这是精简的测试代码:
package app_test
import (
"testing"
"github.com/kargirwar/prosql-go/db"
)
func TestApp(t *testing.T) {
db.SetDbPath("")
}
db包如下:
package db
import (
"os"
"context"
"database/sql"
_ "github.com/mattn/go-sqlite3"
"path/filepath"
)
var dbPath string
func SetDbPath(path string) {
dbPath = path
}
func OpenDb(ctx context.Context, db string) (*sql.DB, error) {
db = filepath.Join(dbPath, db)
_, err := os.OpenFile(db, os.O_RDWR, 0600)
if err != nil {
return nil, err
}
return sql.Open("sqlite3", "file:"+db+"?_foreign_keys=true")
}
我将问题追溯到这种依赖关系:
_ "github.com/mattn/go-sqlite3"
如果我将此注释掉,则测试运行良好,否则会挂起。
奇怪的是 go run 工作得很好。谷歌说 go-sqlite3 需要时间来编译,但是为什么 go run 可以正常工作呢?
【问题讨论】:
标签: go go-sqlite3