Let's say I'm writing some library for internal usage in my project, what's 
the idiomatic way to design visibility of struct members?

   - Option 1. export structs and members as much as possible. Only hide 
   ones that need to be protected, e.g. by a lock
   - Option 2. hide as much as possible. Only export when necessary

*Opt 1 makes testing easier when written in separate pkg. Also we don't 
rely on constructors to inject dependencies*
*Opt 2 defines a clearer API, and prevent users from accessing unnecessary 
fields, which could be prone of error*


Is constructor actually anti-pattern in Go?

type Foo struct {
  A A
  B B
}


func main() {
  _ := &Foo{A: myA, B: myB}
}

vs

type Foo struct {
  a A
  b B
}


func NewFoo(a A, b B) *Foo {
  return &Foo{a: a, b: b}
}


func main() {
  _ := NewFoo(myA, myB)
}


thanks a lot!
- J

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