{ "@context": "https://schema.org", "@type": "Article", "headline": "如何避免使用 for next 方法来获取行数", "datePublished": "2024-03-30T15:27:32", "dateModified": "2024-03-30T15:27:32", "description": "小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《如何避免使用 for next 方法来获取行数》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!问题内容在 php 中,我可以打印 postid 与下面的代码匹配的行计数,而无需在 while 循环中传递结果。$status_query = select count(*) as postcount from postdata where postid=1;$status_result = my", "publisher": { "@type": "Organization", "name": "Golang学习网", "url": "https://m.17golang.com" }, "mainEntityOfPage": { "@type": "WebPage", "@id": "https://m.17golang.com/article/117980.html" } }
登录
首页 >  Golang >  Go问答

如何避免使用 for next 方法来获取行数

来源:stackoverflow

时间:2024-03-30 15:27:32 296浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《如何避免使用 for next 方法来获取行数》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

在 php 中,我可以打印 postid 与下面的代码匹配的行计数,而无需在 while 循环中传递结果。

$status_query = "select count(*) as postcount from postdata where postid=1";
$status_result = mysqli_query($con,$status_query);
$status_row = mysqli_fetch_array($status_result);
$postcount = $status_row['postcount'];
echo $postcount;

现在正在将代码重写为 golang 以获得相同的行数。我利用这里找到的 stackoverflow 解决方案。 源码链接

通过上面的 stackoverflow 解决方案链接,下面的 golang 代码运行良好,因为我可以获得行数。

rows1, err := db.query("select count(*) as postcount from postdata where postid=1")
if err != nil {
    log.fatal(err)
}
defer rows1.close()
var  postcount int

for rows1.next() {   
    if err := rows1.scan(& postcount); err != nil {
        log.fatal(err)
    }
}

fmt.printf("number of rows are %s\n",  postcount)

这是我要修改的内容:

上面的代码传递了以内的行计数结果

for rows1. next(){
// result here.
}

我的问题是:

请如何避免这个 for rows.next() 函数并直接得到我的结果,因为我正在根据 postid 检索行数。 在上面的 php 代码中,我可以直接得到结果,而无需在 while 循环中传递它。

golang中,我正在考虑类似下面的代码

rows1, err := db.query("select count(*) as postcount from postdata where postid=1")
if err != nil {
    log.fatal(err)
}
defer rows1.close()
var status_row = rows1.next() 

var postcount =rows1.scan(& postcount)
fmt.printf("number of rows are %s\n",  postcount)

是否有人有更好的方法让此行计数直接显示,而无需在 rows1.next() 方法中传递结果

这是我在上面的编码插图中寻求修改之前的整体工作代码。

package main

import "database/sql"
import _ "github.com/go-sql-driver/mysql"

import "net/http"
import "fmt"
import "log"

var db *sql.DB
var err error


func getRecordPage1(res http.ResponseWriter, req *http.Request) {

    if req.Method != "POST" {
        http.ServeFile(res, req, "getjsonRecord.html")
        return
    }

//The commented section below is the code I want to modify to avoid use of for rows.next function....
/*
rows1, err := db.Query("SELECT COUNT(*) as postCount FROM like_unlike WHERE postid=1")
if err != nil {
    log.Fatal(err)
}
defer rows1.Close()
var  postCount int

for rows1.Next() {   
    if err := rows1.Scan(& postCount); err != nil {
        log.Fatal(err)
    }
}

fmt.Printf("Number of rows are %s\n",  postCount)

}
*/


func homePage(res http.ResponseWriter, req *http.Request) {
    http.ServeFile(res, req, "index.html")
}

func main() {
    db, err = sql.Open("mysql", "root:@/golang44")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()

    err = db.Ping()
    if err != nil {
        panic(err.Error())
    }

    http.HandleFunc("/getjsonRecord", getRecordPage1)
    http.HandleFunc("/", homePage)
        fmt.Println("Listening on 127.0.0.1:8088")
    http.ListenAndServe(":8088", nil)
}

解决方案


通常,如果您知道自己要获取一行,请使用 DB.QueryRow 它允许您将查询和扫描链接在一起,因此您的示例如下所示:

var  postCount int
err := db.QueryRow("SELECT COUNT(*) as postCount FROM postData WHERE postid=1").Scan(&postCount)
if err != nil {
    log.Fatal(err)
}

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《如何避免使用 for next 方法来获取行数》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>