将数据发送到数据库时出错

时间:2017-09-26 06:09:45

标签: go

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

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)
    }
}

2 个答案:

答案 0 :(得分:7)

defer db.Close()返回时会执行

InitDataBase(),因此当您在db中使用Registration时,会导致错误。

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

答案 1 :(得分:0)

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

中找到