On Mon, Dec 12, 2016 at 6:11 PM, <i...@liangsun.org> wrote: > Consider this case: > > package main > > import ( > "errors" > "fmt" > "sync" > ) > > type A struct { > Lock sync.Mutex > X int > } > > type B struct { > A > Y int > } > > func newA(x int) (A, error) { > if x > 0 { > return A{}, errors.New("x should not be positive") > } > return A{X: x}, nil > } > > func newB(x int, y int) (B, error) { > a, err := newA(x) > if err != nil { > return B{}, err > } > return B{ > A: a, > Y: y, > }, nil > } > > func main() { > b, err := newB(-1, 3) > fmt.Println(b.Y) > fmt.Println(err) > } > > > Actually, there is no way to avoid struct copy if the struct containing > mutex is in another struct directly. > > Run > go tool vet test.go > > It will reports > > test.go:32: literal copies lock value from a: main.A contains sync.Mutex
You write as though you are disagreeing me, but as far as I can tell, you are not. Ian > On Tuesday, December 13, 2016 at 3:16:14 AM UTC+8, Ian Lance Taylor wrote: >> >> On Sun, Dec 11, 2016 at 11:48 PM, <i...@liangsun.org> wrote: >> > >> > What about type embedding? If put a sync.Mutex in a struct, that struct >> > can >> > not be embedded into another struct, right? >> >> That turns out not to be the case. You can embed that struct in >> another struct. But then, of course, you can not simply copy that >> other struct. >> >> > So I guess it's better idea to use structs with pointer to mutex. >> >> It depends. >> >> Ian > > -- > 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. -- 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.