Hi,

here is some code that puzzles me. I recently had defined an interface in a 
project and had a struct implementing the interface an including 
"sync.RWMutex" at the same time.

Sample Code (running): https://play.golang.org/p/DExfr3Izao

If you execute this code it just runs fine. If I "go vet" it I get the 
following warning:

test.go:16: Foo passes lock by value: main.Bar

If I implement the Foo function with a pointer receiver the compile fails 
(if I try to assign a Baz instance to 'var x Foo') with the message the Baz 
does not implement Foo.

The only way that works without complaints from compiler or vet is this:

type Baz struct {
  m *sync.Mutex
}

I can then implement the Interface with a value receiver without complaints 
by go vet - but at the price of having an extra initialization step for my 
struct.

Anybody can provide more insight on what/which tool is right? 

Thanks for any information,
Jens

-- 
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