I would name your interface 'customer', the struct in the main code 
'customerImpl' and the struct in the test code 'mockedCustomer'.  However, 
we are dealing with unexported types here. I tend to be less picky about 
names for unexported types and prefer to leave them to each programmer's 
discretion as long as the names are reasonable. 

In general, I adopt the following guidelines:

For an exported interface that does not represent any domain idea and they 
are there because of their methods, I would adopt the "-er" naming 
convention. (eg. Stringer, Closer, etc.)
For an exported interface that represents a domain idea, I would use the 
domain object name. It is preferable to have a noun with no adjective (eg. 
Customer, Product, Shop, etc.)

For a struct that is not exported but it is the concrete implementation 
of an exported interface, I would use the "<interface_name>+Impl" 
or "<adjective><interface_name>+Impl" to indicate that the struct is the 
concrete implementation of a public interface (eg. customerImpl, 
specialCustomerImpl, customShopImpl, etc.) .

For a struct that is exported, I would use the "<adjective><noun>" format. 
(eg. PublicAccountant, etc.).

For any interface or struct that is used for testing purposes only, I 
would prefix the name with the word "mocked".

For any interface or struct that is not exported, I would leave them to the 
programmer's discretion.

That's what I would do. You may adopt a different naming convention. As far 
as I know, Go puts very little restriction on the subject.

On Sunday, March 5, 2017 at 10:04:47 AM UTC+7, mlg wrote:

> Nope, that's not it :'(. Here's a better way to explain:
>
> main.go
> // (unexported)
> type database?? interface { // how do I name this?
>   query() (result, error)
> }
>
> // (unexported)
> type database?? struct {} // how do I name this?
>
> func (d database??) query() (result, error) {
>   ...
> }
>
> test.go
> // (unexported)
> type mockDatabase struct {} // this name makes sense to me
>
> func (d database??) query() (result, error) {
>   ...
> }
>
> If I've known it was gonna be this hard to get my point across, I would 
> have done this from the start; I'm terribly sorry for wasting so much of 
> your time.
>
> On Sunday, 5 March 2017 15:30:17 UTC+13, Henry wrote:
>>
>> Let's see if I understand your question correctly. You have the interface 
>> in your main code, and the implementing struct in your test code. Do I get 
>> that right?
>>
>> Another question is whether the main code and the test code live in the 
>> same package or different package. I normally put my test code in a 
>> separate package. So if my main code is in package abc, then my test code 
>> would be in abc_test.
>>
>

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