草庐IT

database-concurrency

全部标签

go - 使用 "database/sql"时如何防止 Go 中的 SQL 注入(inject)攻击?

构建我的第一个网络应用程序并希望更好地理解SQL注入(inject)(https://github.com/astaxie/build-web-application-with-golang/blob/master/en/eBook/09.4.md)。始终使用“数据库/sql”库和使用“?”构造查询,我可以获得多少防止SQL注入(inject)的保护而不是连接字符串?在这种情况下,我还需要担心什么样的SQL注入(inject)攻击? 最佳答案 只要您使用Prepare或Query,你很安全。//thisissafedb.Query(

concurrency - 多个 goroutine 打印到标准输出是否安全?

我的程序中有多个goroutine,每个goroutine都调用fmt.Println而没有任何显式同步。这是安全的(即,每一行是否会单独显示而不会损坏数据),还是我需要创建另一个具有同步功能的goroutine来专门处理打印? 最佳答案 不,即使您有时可能观察不到任何问题,这也不安全。IIRC,fmt包试图保证安全,因此可能会发生某种混合,但希望不会出现进程崩溃。这是更通用的Go文档规则的一个实例:除非另有说明或从上下文中显而易见,否则事物对于并发访问是不安全的。通过一些小的初始设置,使用log包可以获得fmt.Print*功能子

database - 从数据库行在 Golang 中创建 map

基本上在进行查询后,我想获取结果行并生成[]map[string]interface{},但我不知道如何使用API执行此操作,因为Rows.Scan()函数需要特定数量的参数与请求的列数(可能还包括类型)匹配才能正确获取数据。再次,我想概括这个调用并接受任何查询并将其转换为[]map[string]interface{},其中映射包含映射到值的列名称那一行。这可能效率很低,我计划稍后更改结构,以便interface{}是单个数据点的结构。我将如何仅使用database/sql包,或者如果需要,使用database/sql/driver包来做到这一点? 最佳答

concurrency - 匿名结构和空结构

http://play.golang.org/p/vhaKi5uVmmpackagemainimport"fmt"varbattle=make(chanstring)funcwarrior(namestring,donechanstruct{}){select{caseopponent:=[第一个问题]done我们如何以及为什么需要这个看起来很奇怪的结构?它是空结构还是匿名结构?我用谷歌搜索了它,但找不到正确的答案或文档来解释这一点。原文来自AndrewGerrand的演讲http://nf.wh3rd.net/10things/#10这里make(chanstruct{})done是

sql - 如何使用包 database/sql 批处理 sql 语句

如何使用Go的database/sql包批处理sql语句?在Java中我会这样做://CreateapreparedstatementStringsql="INSERTINTOmy_tableVALUES(?)";PreparedStatementpstmt=connection.prepareStatement(sql);//Insert10rowsofdatafor(inti=0;i我如何在Go中实现同样的目标? 最佳答案 因为db.Exec函数是variadic,一种选择(实际上只进行一次网络往返)是自己构造语句并分解参数并将

sql - database/sql Tx - 检测提交或回滚

使用database/sql和驱动程序包和Tx,如果不尝试另一个事务并因此收到错误,然后检查错误以确定错误的类型。我希望能够从Tx对象中确定是否已提交。当然,我可以在使用Tx的函数中定义和设置另一个变量,但我有很多变量,每次都是2次(变量和赋值)。如果需要,我还有一个延迟函数来执行回滚,并且需要将它传递给bool变量。在Commit或Rollback之后将Tx变量设置为nil是否可以接受,并且GC是否会恢复任何内存,或者这是不行的,还是有更好的选择? 最佳答案 您要确保Begin()、Commit()和Rollback()出现在同一

database - 如何使用反射调用扫描可变参数函数

我想调用Rows.Scan()使用反射的函数。但是它需要可变数量的指针,但没有很多源示例。我需要使用反射,因为我计划用Query调用中的值填充slice。所以基本上使用rows.Columns()来获取行的长度,然后make()一片[]interface{}到填充通常使用传递给Scan()函数的指针填充的数据点。基本上是这样的代码:col:=rows.Columns()vals:=make([]interface{},len(cols))rows.Scan(&vals)任何人都有调用可变参数函数的示例,该函数使用反射获取指针,我可以看看?编辑:似乎没有做我所追求的示例代码。packag

concurrency - 为高并发应用程序实现全局计数器的最佳方法?

这个问题在这里已经有了答案:Howtocreateglobalcounterinhighlyconcurrentsystem(3个回答)关闭5个月前。为高并发应用程序实现全局计数器的最佳方法是什么?就我而言,我可能有10K-20K的例程执行“工作”,我想计算例程共同处理的项目的数量和类型......“经典”同步编码风格如下所示:varwork_counterintfuncGoWorkerRoutine(){for{//doworkatomic.AddInt32(&work_counter,1)}}现在这变得更复杂了,因为我想跟踪正在完成的工作的“类型”,所以我真的需要这样的东西:var

database - Fabric.js - 如何使用自定义属性在服务器上保存 Canvas

我希望能够将当前Canvas的状态保存到服务器端数据库,可能作为JSON字符串,然后使用loadFromJSON恢复它。通常,这很容易使用:varcanvas=newfabric.Canvas();functionsaveCanvas(){//convertcanvastoajsonstringvarjson=JSON.stringify(canvas.toJSON());//saveviaxhr$.post('/save',{json:json},function(resp){//dowhatever...},'json');}然后functionloadCanvas(json){/

database - 在 Linux/POSIX 系统上获取用户全名的最简单方法是什么?

我可以通过/etc/passwdgrep但这似乎很麻烦。'finger'没有安装,我想避免这种依赖。这是一个程序,所以如果有一些命令可以让您访问用户信息,那就太好了。 最佳答案 你没有指定编程语言,所以我假设你想使用shell;这是Posixshell的答案。两个步骤:获取适当的记录,然后从该记录中获取您想要的字段。首先,通过查询passwd表来获取账户记录:$user_name=foo$user_record="$(getentpasswd$user_name)"$echo"$user_record"foo:x:1023:1025