LINUX.ORG.RU

Таймаут в контексте не срабатывает

 , ,


0

2
ctx, cancel := context.WithTimeout(context.Background(), time.Duration(timeout)*time.Second)
defer cancel()
connect, err := mssql.NewConnector(connStr)
if err != nil {
	return err
}
db := sql.OpenDB(connect)
defer db.Close()
_, err = db.ExecContext(ctx, "WAITFOR DELAY '00:00:01';")
return err

И вижу зависшее соединение TCP lolcathost:37132->sql2k801.discountasp.net:ms-sql-s (ESTABLISHED). Есть такой же тикет https://github.com/denisenkom/go-mssqldb/issues/604 и, похоже, всем на*рать на него. Вопрос к опытным гоферам, как принудительно закрыть коннект и вернуть err средствами самого Go?

★★★★

Даже такая конструкция не срабатывает.

	connect, err := mssql.NewConnector(connStr)
	if err != nil {
		return err
	}
	db := sql.OpenDB(connect)
	ctx, cancel := context.WithTimeout(context.Background(), time.Duration(timeout)*time.Second)
	go func() {
		time.Sleep(time.Duration(timeout) * time.Second)
		db.Close()
		cancel()
	}()

А М$ это советует в продакт https://github.com/microsoft/sql-server-samples/tree/master/samples/tutorials/go

dnb ★★★★
() автор топика

как принудительно закрыть коннект и вернуть err средствами самого Go?

DB.Conn возвращает объект sql.Conn. Попробуй заюзать его. Если не сработает попробуй закрыть (conn.Close()).

DukeNukem
()
Ответ на: комментарий от dnb

А М$ это советует в продакт…

в своем проде лучше багнутую либу не юзать пиши свой драйвер если планируется юзать не в пет проекте.

DukeNukem
()

ты знал на что шел выбирая язык для петухов на самокатах, у тебя появился неплохой шанс не отходя от работы поучаствовать в опенсорсе, удачи братишка.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.