【问题标题】:Error while sending data to the database向数据库发送数据时出错
【发布时间】:2017-09-26 06:09:45
【问题描述】:

我正在尝试传输数据以将它们写入数据库。 但我有错误“恐慌:运行时错误:无效的内存地址或零指针取消引用” 在这个函数中,我等待来自客户端的数据

func handlePacket(conn net.Conn) {
    rw := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn))
    defer conn.Close()

    packet := model.RegistrationMessage{}
    client := JsonDecoderMessage(rw).Decode(&packet)
    if client != nil {
        puts("Error from Decode.Please NO :(")
    }

    if packet.MessageType == model.AUTH_MESSAGE {
        puts("Auth")
    } else if packet.MessageType == model.REGS_MESSAGE {
        puts("Regs")
        Registration(packet.Login, packet.Password)
        puts("good")
    }
}

在这里我与数据库建立连接并尝试在数据库中发送数据

var db *sql.DB

func InitDataBase() {
    psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+
        "password=%s dbname=%s sslmode=disable",
        host, port, user, password, dbname)
    db, err := sql.Open("postgres", psqlInfo)
    if err != nil {
        panic(err)
    }
    defer db.Close()

    err = db.Ping()
    if err != nil {
        panic(err)
    }
    fmt.Println("Successfully connected!")
}
func Registration(email, password string) {
    sqlStatement := `INSERT INTO account0( email,password)
        VALUES ($1, $2) RETURNING id`
    id := 0
    err := db.QueryRow(sqlStatement, email, password).Scan(&id)
    if err != nil {
        panic(err)
    }
}

【问题讨论】:

  • 把 defer db.Close() 放到你的 main 函数中。

标签: go


【解决方案1】:

defer db.Close()会在InitDataBase()返回时执行,所以当你在Registration中使用db时会报错。

您应该在程序退出之前或在您使用完数据库之后调用db.Close(),以先到者为准。

【讨论】:

    【解决方案2】:

    谢谢大家。我找到了答案。您需要将db, err: = sql.Open ("postgres", psqlInfo) 更改为db, err= sql.Open ("postgres", psqlInfo)。 在此链接中找到答案enter link description here

    【讨论】:

      猜你喜欢
      • 2021-03-12
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      相关资源
      最近更新 更多