gpt4 book ai didi

sql - 在 Go 中控制指针

转载 作者:IT王子 更新时间:2023-10-29 01:42:13 25 4
gpt4 key购买 nike

在对数据库进行查询后,我试图遍历 ,但我在第二次遍历它以找到 女性 时遇到了问题。

我相信这是因为在它遍历 rows 打印出 men 之后,指针留在最后并且无法返回。

rows2, rowErr :=db.Query("SELECT GIVENNAME,gender, count(givenname) as Frequency from people group by givenname order by givenname asc")

for rows2.Next() {
nextErr := rows2.Scan(&givenName,&gender, &frequency)
if nextErr != nil{
log.Fatal(nextErr.Error())
}
if gender == "male" {
fmt.Println(givenName, gender, frequency)
}
}
fmt.Println("")
for rows2.Next() {
nextErr := rows2.Scan(&givenName,&gender, &frequency)
if nextErr != nil{
log.Fatal(nextErr.Error())
}
if gender == "female" {
fmt.Println(givenName, gender, frequency)
}
}

如何将指针重新放在开头?还是我必须再做一次查询?

最佳答案

您不能“回滚”指向先前值的指针,因此您必须使用另一个(临时)变量来迭代。

rows2, rowErr := db.Query("SELECT GIVENNAME, gender, count(givenname) as Frequency from people group by givenname order by givenname asc")

var list1, list2 MyPeopleStruct
temp := rows2

for temp.Next() {
nextErr := rows2.Scan(&givenName,&gender, &frequency)
if nextErr != nil{
log.Fatal(nextErr.Error())
}

if gender == "male" {
fmt.Println(givenName, gender, frequency)
}
}

fmt.Println("")

temp = rows2 // reinitialise it to the actual value you need

for temp.Next() {
nextErr := rows2.Scan(&givenName,&gender, &frequency)
if nextErr != nil{
log.Fatal(nextErr.Error())
}

if gender == "female" {
fmt.Println(givenName, gender, frequency)
}
}

无论如何,为什么你甚至需要制作两个不同的 for 循环

你不能只用一个做所有事情吗?喜欢:

type MyPeopleStruct struct{
Gender string
Name string
Frequency int
}

rows2, rowErr := db.Query("SELECT GIVENNAME, gender, count(givenname) as Frequency from people group by givenname order by givenname asc")

var listM, listF []MyPeopleStruct

temp := rows2

for temp.Next() {
nextErr := rows2.Scan(&givenName,&gender, &frequency)
if nextErr != nil{
log.Fatal(nextErr.Error())
}

if gender == "male" {
fmt.Println(givenName, gender, frequency)
listM = append(listM, MyPeopleStruct{gender,givenName,frequency})
}

if gender == "female" {
fmt.Println(givenName, gender, frequency)
listF = append(listF, MyPeopleStruct{gender,givenName,frequency})
}
}

// Use listM and listF

关于sql - 在 Go 中控制指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36776740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com