Much of the stdlib works in the manner I describe. Yes Go allows invocations on nil interface references, but most implementations will panic.
Multiple Close is almost never a good thing, and most implementations guard against it. So in the case where the gerReader() succeeds and getDB() fails, how do you clean-up (without a bunch of if clauses, so no better then if err != nil). And what about the cases when the cleanup code returns errors? > On Jul 8, 2019, at 7:59 AM, Wojciech S. Czarnecki <o...@fairbe.org> wrote: > > On Mon, 8 Jul 2019 07:37:20 -0500 > Robert Engels <reng...@ix.netcom.com> wrote: > >> This will never work because of dependent resource allocation. >> And you wouldn’t be able to check resources against nil if they are structs, >> so you have no way to properly cleanup up. >> If would quickly degenerate back to if err != nil. > > If the functions called in the block follow bad practices - > yes, then the `check` will be harder[1] to use for them. > >> As in >> >> check(err!=nil){ >> token, err = getToken() >> reader,err = getReader(token) >> db,err = get DB(reader) >> >> catch: > >> How do you know know which resources need to be closed/cleaned-up > > Because I wrote the getToken and getReader and getDB to return zero > object on err and gave their .Clean() / .Close() methods ability to be invoked > multiple times ? :) > > [1] // make bad implementations usable with check: > > token := &tokenType{} // assume a pointer out of your "against nil" > reader := new(dummy.Reader) > db := new(mock.DB) > > Anyway, your concerns are sound and need (documentation side) attention. > Thank you. > > -- > Wojciech S. Czarnecki > << ^oo^ >> OHIR-RIPE -- 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/4C7EDEDD-9CEB-432D-9F8B-F93C59EC8EA7%40ix.netcom.com. For more options, visit https://groups.google.com/d/optout.