【问题标题】:Why is my golang app returning no Postgres records if compiled without error and returns no errors?如果编译没有错误并且没有返回错误,为什么我的 golang 应用程序没有返回 Postgres 记录?
【发布时间】:2019-05-20 01:37:59
【问题描述】:

情况如下图:https://pasteboard.co/HSsFIgn.png

我有 PostgreSQL 便携版 10.1 和 golang 1.10.2 便携版。我写了一个简单的程序来从数据库中获取数据,但我没有得到响应代码是这样的:我没有编译错误,我可以运行 dbapp.exe,结果什么也没得到,请看上面粘贴的图片或下面的代码:谢谢任何提示。

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/lib/pq"
    "log"
)

const (
    DB_USER     = "postgres"
    DB_PASSWORD = ""
    DB_NAME     = "golang"
)

func main() {
    dbinfo := fmt.Sprintf("user=%s password=%s dbname=%s sslmode=disable",
        DB_USER, DB_PASSWORD, DB_NAME)
    db, err := sql.Open("postgres", dbinfo)
    checkErr(err)
    defer db.Close()
    var (
        id int
        name string
    )
    rows, err := db.Query("select id, song from music where id = 1")
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()
    for rows.Next() {
        err := rows.Scan(&id, &name)
        if err != nil {
            log.Fatal(err)
        }
        log.Println(id, name)
    }
    err = rows.Err()
    if err != nil {
        log.Fatal(err)
    }
}

func checkErr(err error) {
    if err != nil {
        fmt.Println(err)
        panic(err)
    }
}

【问题讨论】:

  • 针对您数据库中的golang DB 查询select id, song from music where id = 1 是否真的产生结果?
  • 您确定您运行的是正确版本的应用程序吗?由于代码完全没有输出,所以很难知道......
  • go 代码、db 连接参数和 db 数据似乎一切正常。尝试重新编译二进制文件并再次运行它。此外,还要检查 postgres 的日志以查看它是否正在接收查询(如果尚未启用日志,您可能必须先启用日志,然后重新启动服务器)。
  • 好的,我知道了,问题是 sql.Open 字符串,fianl 代码可以这样工作,没有问题:package main import ("database/sql" "fmt" _ "github.com/lib /pq" "log" ) func main() { //需要更改 sql.Open 字符串 db, err := sql.Open("postgres", "user=postgres dbname=golang port=5432 sslmode=disable") checkErr (err) defer db.Close() var ( id int name string )...等等类似上...

标签: postgresql go


【解决方案1】:

解决方案是 sql.Open 字符串,它被破坏或其他什么,现在它可以这样工作:

package main
    import (
        "database/sql"
        "fmt"
        _ "github.com/lib/pq"
        "log"
        )
    func main() {
        //necessary to change sql.Open strings
        db, err := sql.Open("postgres", "user=postgres dbname=golang port=5432 sslmode=disable")
        checkErr(err)
        defer db.Close()
        var (
            id int
            name string
        )
        rows, err := db.Query("select id, song from music where id = 1")
        if err != nil {
            log.Fatal(err)
        }
        defer rows.Close()
        for rows.Next() {
            err := rows.Scan(&id, &name)
            if err != nil {
                log.Fatal(err)
            }
            log.Println(id, name)
        }
        err = rows.Err()
        if err != nil {
            log.Fatal(err)
        }
    }
    func checkErr(err error) {
        if err != nil {
            fmt.Println(err)
            panic(err)
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 2022-09-22
    • 2018-08-16
    • 2017-01-31
    • 2022-06-30
    • 1970-01-01
    相关资源
    最近更新 更多