草庐IT

all-database

全部标签

go - 使用 sync.WaitGroup 时获取 "fatal error: all goroutines are asleep - deadlock!"

我正在尝试拆分一组goroutine,然后等待它们全部完成。import"sync"funcdoWork(wgsync.WaitGroup)error{deferwg.Done()//Dosomeheavylifting...requestURL'sorsimilarreturnnil}funcmain(){varwgsync.WaitGroupfori:=0;i但是,当我运行这段代码时,出现以下错误:fatalerror:allgoroutinesareasleep-deadlock!goroutine16[semacquire]:sync.runtime_Semacquire(0x

string - 在 Go 中处理动态错误(特别是 database/sql 包)

在go中使用database/sql包执行sql.Exec之类的操作将返回动态生成的未引用错误,例如"Error1062:Duplicateentry'192'forkey'id'"问题是它也可以返回错误,例如"Error1146:Table'tbl'doesn'texist"来自对sql.Exec的相同调用在没有的情况下,我如何分辨这两个错误之间的区别?字符串比较,或者错误代码的模式匹配或者这些是该问题的惯用可行解决方案? 最佳答案 database/sql包没有解决这个问题。它是特定于驱动程序的。例如,对于mysql你可以使用:

戈朗 : Parse all templates in directory and subdirectories?

这是我的目录结构:app/template/layout/base.tmplindex.tmpltemplate.ParseGlob("*/*.tmpl")解析index.tmpl但不解析中的base.tmpllayout子目录。有没有办法递归解析所有模板? 最佳答案 不是没有实现你自己的功能来做到这一点,我一直在使用这样的东西funcParseTemplates()*template.Template{templ:=template.New("")err:=filepath.Walk("./views",func(pathstri

go - Golang中使用database/sql包调用QueryRow方法超时

在Golang中使用database/sql包实现QueryRow方法调用超时的合适方法是什么?关于这个主题已经有很多讨论,我想知道golang1.7中是否有解决方案/最佳实践,而不是像这里描述的那样使用context包:Abilitytotimeoutwhenwatingfortheconnectionfromthepool此外,似乎contextsupport一直implementedrecently.使用上下文使连接超时的合适方法是什么? 最佳答案 就go1.7而言,您必须在以下级别实现自己的功能:池级别(问题链接)查询级别,

go - 打印机接收器程序中的 "all goroutines are asleep - deadlock! Exit status 2"错误

我正在尝试创建一个简单的程序来学习Go中的channel。但是我遇到了一个死锁错误,我无法弄清楚packagemainimport("fmt""time")funcprinter(cchanint){fori:=0;i我最初的想法是关于sleep功能,但即使我不包括它,我仍然会遇到这个错误并退出消息。任何人都可以就如何解决这个问题给出一些提示吗?提前致谢 最佳答案 您需要两个执行线程,因为现在无法调用reciever函数,因为您永远不会离开printer函数。您需要在单独的goroutine上执行其中之一。您还应该关闭channel

sql - 戈朗 : Ping succeed the second time even if database is down

我遇到了一个有趣的问题,即db.Ping()不会返回错误,即使自第一次尝试以来数据库已被终止。源代码如下:import("database/sql""fmt""log""time"_"github.com/go-sql-driver/mysql")typedatabasestruct{datasourcestringconn*sql.DB}//ConnectcreatesandinitialisesaDatabasestructfunc(db*database)Connect(server,user,password,DBPortstring)error{varerrerrordb.d

去和 Gin : Passing around struct for database context?

我刚刚开始尝试Go,我希望用它重新实现一个用node编写的API服务器。我在尝试使用依赖注入(inject)将数据库上下文作为gin中间件传递时遇到了障碍。到目前为止,我已经将其设置为:main.go:packagemainimport("fmt""runtime""log""github.com/gin-gonic/gin""votesforschools.com/api/public""votesforschools.com/api/models")typeDBstruct{models.DataStore}funcmain(){ConfigRuntime()ConfigServe

go - SQLite3错误: database is locked in golang

我在golang中使用sqlite3数据库,但出现错误:“数据库已锁定。”我知道不能有多个线程使用同一个数据库文件。尽管我的程序中只有一个连接,但我关闭了所有查询结果,但它总是会创建2或3个数据库文件句柄。我可以使用Opendfileview程序检查这一点。以下代码创建两个数据库文件句柄。funcmain(){database,tx,err:=getDatabaseHandle()iferr!=nil{log.Fatal(err)}deferdatabase.Close()dosomething(database,tx)}funcdosomething(database*sql.DB,

database - SetMaxOpenConns 和 SetMaxIdleConns

为什么会有SetMaxOpenConns和SetMaxIdleConns。在docSetMaxIdleConnsSetMaxIdleConnssetsthemaximumnumberofconnectionsintheidleconnectionpool.IfMaxOpenConnsisgreaterthan0butlessthanthenewMaxIdleConnsthenthenewMaxIdleConnswillbereducedtomatchtheMaxOpenConnslimitIfnSetMaxOpenConnsSetMaxOpenConnssetsthemaximumnu

database - 如何从 Git 存储库中丢失的 blob 中恢复?

我正在运行Git1.6.4.2。垃圾收集失败并提示“错误:无法找到”。我已设法确定丢失的对象是一个blob,但我无法取回blob文件。似乎运行“gitadd”和“gitcommit”的两个脚本同时运行并设法相互干扰,因此一个提交的文件版本比另一个高,而旧版本的blob消失了。因此,我正在尝试回滚我的存储库,以删除引用丢失的blob的树的提交。我知道提交在哪个分支上,所以我在其上运行“gitreset”以倒回到duff提交的父级。而且我知道该分支已在其他地方merge,所以我也重新绕过该分支。据我所知,duffcommit/tree/blob没有被任何东西引用。但是如果我运行gitpru