Задать вопрос
@varstring

Ошибка при передаче данных в БД, что делать?

Вообщем я пытаюсь передать данные для записи их в БД как у меня выходит ошибка, Gogland IDE говорит что , что то не так с - go handlePacket(connectFD) он вызывается сразу после socket.Accept() в новом потоке.Подскажите что может быть не так . ах да программа вылетает в методе db.QueryRow(sqlStatement,email,password).Scan(&id)

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)
	}
}
  • Вопрос задан
  • 285 просмотров
Подписаться 2 Средний Комментировать
Решения вопроса 1
@varstring Автор вопроса
я нашел ответ )) ошибка оказалась в присваивание , вместо
db, err := sql.Open("postgres", psqlInfo)
надо было
db, err = sql.Open("postgres", psqlInfo)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
При завершении работы функции InitDataBase() вы закрываете соединение с базой данных, поэтому и не можете с неё ничего получить потом.
defer db.Close() отрабатывает сразу после fmt.Println("Successfully connected!")
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы