* Robert Engels <reng...@ix.netcom.com> [210607 21:18]: > (I think you pasted the wrong link - that is my code).
subsequent correction acknowledged; assuming the following discussion is about https://play.golang.org/p/-f73t_Pm7ur > It is not about being unwilling to admit it. Your > explanation/reasoning has not convinced me. > > Imagine some library declares the EventLogger interface as shown. > Acceptable. Someone writes the RecordEvents() method taking an > EventLogger. Acceptable. > > Now, I have a struct I want to use with as an EventLogger (badly named > - really EventSource). The code I wrote works fine. Test cases (of > Log()) work fine. It fails when used as a source to RecordEvents() > (and similar held reference patterns). I have to agree with Axel. This code is not fine, and it is easy to at least notice that it is suspect, even if it requires more careful examination to determine that it is wrong. The fact that the Log method has a value receiver and the Inc method has a pointer receiver is a very obvious clue that this code needs careful review. Next, Log takes a value receiver, but is using synchronization (whether it is atomic or mutex doesn't matter); this should be where the programmer realizes that the code is broken. And, as Axel keeps saying, it has nothing to do with interfaces; the method on the struct is broken without any interface being involved. You say that test cases of Log work fine, but they are only fine in a non-concurrent environment. The instant you test Log (without interfaces) in a concurrent program it fails in an obvious manner. Interfaces, and their ability to potentially be satisfied by either a non-pointer type or a pointer type, depending on the type, is not the problem here. ...Marvin -- 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/20210608043609.gguu3t3hqbsziema%40basil.wdw.