Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables Golang sqlite3数据库输出到变量_Variables_Go_Sqlite - Fatal编程技术网

Variables Golang sqlite3数据库输出到变量

Variables Golang sqlite3数据库输出到变量,variables,go,sqlite,Variables,Go,Sqlite,我最近刚开始和golang调情。 通过创建一个项目,我很容易地自学了php和jquery 我正在尝试同样的自动取款机来自学golang,但我已经说到了一点 现在,要么我没有抓住重点,要么就是搜索不正确 好的,所以我要做的是做一个IRC机器人。 其中一个函数监听通道抖动&如果拾取了某些命令 然后,它将向sqlite3数据库添加相关信息 问题是其中一个命令查询数据库并返回多行,然后需要将这些行传递回原始函数并输出到IRC通道 我陷入困境的地方是将查询输出返回到原始函数,因为它是多行数据 我正在导入

我最近刚开始和golang调情。 通过创建一个项目,我很容易地自学了php和jquery

我正在尝试同样的自动取款机来自学golang,但我已经说到了一点 现在,要么我没有抓住重点,要么就是搜索不正确

好的,所以我要做的是做一个IRC机器人。 其中一个函数监听通道抖动&如果拾取了某些命令 然后,它将向sqlite3数据库添加相关信息

问题是其中一个命令查询数据库并返回多行,然后需要将这些行传递回原始函数并输出到IRC通道

我陷入困境的地方是将查询输出返回到原始函数,因为它是多行数据

我正在导入以下库 fmt net/textproto 正则表达式 串 操作系统 数据库/sql _github.com/mattn/go-sqlite3

所以我可以打印它,但我需要将它传递给另一个函数,这就是我丢失的地方

=============================================更新====================================

好的,这是我的全部代码。。。 @evanmcdonnal根据您在上面给出的更新代码,我现在得到了错误 bot.go:70:无法将p类型播放器用作追加中的类型*播放器


基本上,我想将sql查询的结果传回talkpm.channel、pm.nick+sql查询结果irc talk部分

我想您没有理解的是,在从数据库返回数据后,如何在Go应用程序中建模数据。用于存储读取的值的变量仅限于循环的作用域,是单例变量,如何返回集合?当然,通过使用集合

这是我要考虑的两个选项: 我只是把所有的东西串成一根大绳子。如果您打算在his之后很快将输出转储到控制台,并且您没有任何实际的处理要做,那么最简单的方法可能是在循环之前声明一个字符串,保持扫描状态,将结果以逗号分隔符等常见格式附加到字符串中,然后将其传递给函数/将其写入IRC或其他格式

2使用实际收集。在任何严肃的程序中,您可能会对来自数据库的数据做更多的处理,而不仅仅是打印数据。更现实的实现是创建具有teamName和playerName字段的Player结构。在循环之前,如果您知道有多少结果将返回,您将初始化一个播放器片段或一个数组。在循环中,您将创建一个新实例,并使用append函数将其添加到切片中。循环完成后,将切片/数组传递给下一个需要使用数据的对象

这是两个样品。请注意,这些都未经测试,我不考虑性能。例如,如果性能是一个问题,您可能应该在字符串连接中使用类似的东西


试着把你的团队和球员放在一个结构中

type teamplayer struct {
   team string
   player string
}

现在,在查询数据库的函数中,创建一个teamplayer列表

var tpList []teamplayer
for rows.Next() {
        var tp teamplayer
        if err := rows.Scan(&tp.team, &tp.player); err != nil{
             //process what to do in case of error
        }
        tplist = append (tplist, tp)
}//end of for loop
return tplist

您是否研究过?旁注/nit中的示例:将sql.Open移到别处并重新使用返回的db值。同样,您也可以重复使用您准备的声明:返回的数据库对于多个goroutine并发使用是安全的,并维护自己的空闲连接池。因此,Open函数应该只调用一次。很少需要关闭数据库。@evanmcdonnal ok将我的完整脚本作为editbump发布在上面。如果我尝试更简单的不太健壮的选项1,我会得到错误:返回的参数太多如果我使用第二个选项,我会得到错误:无法在中使用p type*Player作为类型Playerappend@Sayajin第一个错误是因为您的方法没有返回类型,如果您使用的是选项一,那么包含该代码的方法应该至少返回一个字符串约定,即返回字符串error。在第二种情况下,因为集合需要是[]*播放器,我将使用它进行编辑。您也可以将循环中的代码更改为使用播放机值类型,但我更喜欢指针实现。如果我尝试这种方式,会出现以下错误:121:未定义:tplist 123:未定义:tplist 123:返回的参数太多您可以发布新代码和函数吗?您是否声明要返回类型tplist?如果没有代码,就无法关联您发布的错误行。我将很快将我的脚本粘贴到这里,然后至少有人能为我指出正确的方向,正如我所说的,我是一个十足的golang新手,但我从实践中学到了最好的东西,开始一个项目对我来说是最好的方式。
type Player struct {
    TeamName string
    PlayerName string
}

var Players []*Player
for rows.Next() {
        p := &Player{}
        if err := rows.Scan(p.TeamName, p.PlayerName); err != nil{
             // handle error
        }
        Players = append(Players, p)
}
// pass Players to next function/return it whatever


// simpler less robust option 1

lineUp := ""
for rows.Next() {
            var team string
            var player string
            rows.Scan(&team, &player)
            lineUp += team + ":" + player "\n"
    }
return lineUp
type teamplayer struct {
   team string
   player string
var tpList []teamplayer
for rows.Next() {
        var tp teamplayer
        if err := rows.Scan(&tp.team, &tp.player); err != nil{
             //process what to do in case of error
        }
        tplist = append (tplist, tp)
}//end of for loop
return tplist