It's a known bad thing to defer a close for anything buffered, as discussed 
at https://www.joeshaw.org/dont-defer-close-on-writable-files/
but some constructs lack a Sync() call.

For example, I have code like
        ifDB, message, err := OpenInflux(server, debug)
        if err != nil {
                // If this fails, fail fast so we notice
                panic(fmt.Errorf("failed to open and ping influxDB, %s %v",
                        message, err))
        }
        defer func() {
                err = ifDB.Close()
                if err != nil {
                        // This may be a harmless, very bad thing
                        panic(fmt.Errorf("failure closing connection to 
influxDB, %v", err))
                }
        }()


which closes an influxDB database, but will panic if the close fails.

Separate logic makes sure I have passed the point at which the data is 
committed before I commit my reading of input, so eventually the data will 
be reread and rewritten. Nevertheless, this is exceedingly complex, and the 
comment sums it up: "a harmless, very bad thing".

Is there an idiomatic way to address this? I ended up reading influxDB code 
and doing all sorts of deranged safety-critical-system DFAs to reassure 
myself this will actually work, but every time I do that, my brain hurts!

--dave


-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to