On Mon, Jul 22, 2019 at 10:37 AM Robert Engels <reng...@ix.netcom.com> wrote:
>
>
>
>
>
>
>
> -----Original Message-----
> >From: Burak Serdar <bser...@ieee.org>
> >Sent: Jul 22, 2019 11:13 AM
> >To: Tong Sun <suntong...@gmail.com>
> >Cc: golang-nuts <golang-nuts@googlegroups.com>
> >Subject: Re: [go-nuts] Variable life time -- sql.DB connection defer closing 
> >question
> >
> >On Mon, Jul 22, 2019 at 9:35 AM Tong Sun <suntong...@gmail.com> wrote:
> >>
> >> All SQL DB statements need a sql.DB connection:
> >>
> >> var conn *sql.DB = ...
> >> defer conn.Close()
> >>
> >> statement, err := conn.Prepare(SQL)
> >>
> >>
> >> My question is, if I want to reuse the `conn` variable later on in the 
> >> same function,
> >>
> >> conn, err = sql.Open("mssql", NewConnString)
> >
> >If you didn't close conn here, then it will leak. The defer will close
> >the second connection, not the first.
> >You can add a second defer after opening the second connection. Or,
> >use a different variable and defer closing of that as well.
> >
> >Closing the first connection manually before opening the second won't
> >work. The first defer will try to close the first connection. Defer
> >evaluates its arguments when it is declared, not when it runs.
> >
> >
> >>
> >>
> >> Do I need to put another `defer conn.Close()` after it, or the first 
> >> `defer conn.Close()` still applies? Or I should call `conn.Close()` 
> >> explicitly beforehand?
> >>
> >> thanks
> >>
> >> --
> >> You received this message because you are subscribed to the Google Groups 
> >> "golang-nuts" group.
> >> To unsubscribe from this group and stop receiving emails from it, send an 
> >> email to golang-nuts+unsubscr...@googlegroups.com.
> >> To view this discussion on the web visit 
> >> https://groups.google.com/d/msgid/golang-nuts/11c35ccc-0713-4e09-8325-a4e608758b15%40googlegroups.com.
> >
> >--
> >You received this message because you are subscribed to the Google Groups 
> >"golang-nuts" group.
> >To unsubscribe from this group and stop receiving emails from it, send an 
> >email to golang-nuts+unsubscr...@googlegroups.com.
> >To view this discussion on the web visit 
> >https://groups.google.com/d/msgid/golang-nuts/CAMV2RqrkNLeBmWuFS6yE-L_VDRDZaOCrmJASP0n3g22p4rnNTg%40mail.gmail.com.
>
> I don't think that is true. The first defer will be scheduled with the first 
> conn arg (since it is evaluated at call time). You need another defer after 
> the second open. You will end up with Close being called twice from defer 
> which is what you want.


I thought that's what I said as well. What part is wrong?

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAMV2RqofVWnQJ9HrJ9NpRuP2PKcZTa%3DA6w82%2B9H3c3hR-9veuw%40mail.gmail.com.

Reply via email to