Re: [go-nuts] Re: Struct members, hide or export?

2018-08-09 Thread Jay G
On Thu, Aug 9, 2018 at 8:14 PM Manlio Perillo  wrote:
>
>
>
> On Thursday, August 9, 2018 at 9:50:55 AM UTC+2, Jay G wrote:
>>
>> 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
>>
>
> The words "internal usage" and "users accessing the api" are in 
> contradictions.

users = other pkgs within project using this lib
internal = not intended to be used by other projects
>
> For internal usage I assume a package inside an "internal" directory.

yes

thanks!
- J
>
> > [...]
>
> Manlio
>
> --
> You received this message because you are subscribed to a topic in the Google 
> Groups "golang-nuts" group.
> To unsubscribe from this topic, visit 
> https://groups.google.com/d/topic/golang-nuts/iZMw82G-lMo/unsubscribe.
> To unsubscribe from this group and all its topics, 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.


[go-nuts] Re: Struct members, hide or export?

2018-08-09 Thread Manlio Perillo


On Thursday, August 9, 2018 at 9:50:55 AM UTC+2, Jay G wrote:
>
> 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*
>
>
The words "internal usage" and "users accessing the api" are in 
contradictions.

For internal usage I assume a package inside an "internal" directory.

> [...]

Manlio 

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


[go-nuts] Re: Struct members, hide or export?

2018-08-09 Thread snmed
Hi

I would suggest to use the second option. If you export all possible 
members, you have to care on every redesign who and how this members are 
used. This makes a redesign unnecessarily tricky.
Constructor functions are a common pattern in go code and therefore you 
should not flinch to use it. For testing you can append "_test" to the 
package name and then your test can't see any non exportet members of your 
package.

Cheers
Sandro

Am Donnerstag, 9. August 2018 09:50:55 UTC+2 schrieb Jay G:
>
> 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() {
>   _ := {A: myA, B: myB}
> }
>
> vs
>
> type Foo struct {
>   a A
>   b B
> }
>
>
> func NewFoo(a A, b B) *Foo {
>   return {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.