Where should we define Go interface in multiple Consumer scenario ? What about interface in producer to show...
Can someone give me a concrete example to this advise ?
https://github.com/golang/go/wiki/CodeReviewComments#interfaces
So is this how i follow it ?
package worker
type interface DB {
getAllTable()
}
type worker struct {
db DB
}
func (w worker) doSomething() {
w.db.getAllTable()
}
package listener
type interface DB {
getAllTable()
}
type listener struct {
db DB
}
func (l listener) doSomething() {
l.db.getAllTable()
}
package msql
type mysql struct {}
func (mysql) getAllTable() {
}
Is it alright to duplicate the interfaces in 2 places to satisfy ‘define consumer where it is consumed’.
What about using interface to show generality ? It’s defining interface not where it is consumed
For example hash/crc32 and hash/adler32 implementing hash.Hash32

add a comment |
Can someone give me a concrete example to this advise ?
https://github.com/golang/go/wiki/CodeReviewComments#interfaces
So is this how i follow it ?
package worker
type interface DB {
getAllTable()
}
type worker struct {
db DB
}
func (w worker) doSomething() {
w.db.getAllTable()
}
package listener
type interface DB {
getAllTable()
}
type listener struct {
db DB
}
func (l listener) doSomething() {
l.db.getAllTable()
}
package msql
type mysql struct {}
func (mysql) getAllTable() {
}
Is it alright to duplicate the interfaces in 2 places to satisfy ‘define consumer where it is consumed’.
What about using interface to show generality ? It’s defining interface not where it is consumed
For example hash/crc32 and hash/adler32 implementing hash.Hash32

2
It's fine to duplicate it, but the given code doesn't need to have either copy because it's never referenced. Define an interface where it is consumed.
– Adrian
Nov 19 '18 at 19:55
Is there a concrete example of this on standard library / large scale project ?
– despacito2012
Nov 20 '18 at 7:45
add a comment |
Can someone give me a concrete example to this advise ?
https://github.com/golang/go/wiki/CodeReviewComments#interfaces
So is this how i follow it ?
package worker
type interface DB {
getAllTable()
}
type worker struct {
db DB
}
func (w worker) doSomething() {
w.db.getAllTable()
}
package listener
type interface DB {
getAllTable()
}
type listener struct {
db DB
}
func (l listener) doSomething() {
l.db.getAllTable()
}
package msql
type mysql struct {}
func (mysql) getAllTable() {
}
Is it alright to duplicate the interfaces in 2 places to satisfy ‘define consumer where it is consumed’.
What about using interface to show generality ? It’s defining interface not where it is consumed
For example hash/crc32 and hash/adler32 implementing hash.Hash32

Can someone give me a concrete example to this advise ?
https://github.com/golang/go/wiki/CodeReviewComments#interfaces
So is this how i follow it ?
package worker
type interface DB {
getAllTable()
}
type worker struct {
db DB
}
func (w worker) doSomething() {
w.db.getAllTable()
}
package listener
type interface DB {
getAllTable()
}
type listener struct {
db DB
}
func (l listener) doSomething() {
l.db.getAllTable()
}
package msql
type mysql struct {}
func (mysql) getAllTable() {
}
Is it alright to duplicate the interfaces in 2 places to satisfy ‘define consumer where it is consumed’.
What about using interface to show generality ? It’s defining interface not where it is consumed
For example hash/crc32 and hash/adler32 implementing hash.Hash32


edited Nov 20 '18 at 7:48
despacito2012
asked Nov 19 '18 at 19:52
despacito2012despacito2012
2818
2818
2
It's fine to duplicate it, but the given code doesn't need to have either copy because it's never referenced. Define an interface where it is consumed.
– Adrian
Nov 19 '18 at 19:55
Is there a concrete example of this on standard library / large scale project ?
– despacito2012
Nov 20 '18 at 7:45
add a comment |
2
It's fine to duplicate it, but the given code doesn't need to have either copy because it's never referenced. Define an interface where it is consumed.
– Adrian
Nov 19 '18 at 19:55
Is there a concrete example of this on standard library / large scale project ?
– despacito2012
Nov 20 '18 at 7:45
2
2
It's fine to duplicate it, but the given code doesn't need to have either copy because it's never referenced. Define an interface where it is consumed.
– Adrian
Nov 19 '18 at 19:55
It's fine to duplicate it, but the given code doesn't need to have either copy because it's never referenced. Define an interface where it is consumed.
– Adrian
Nov 19 '18 at 19:55
Is there a concrete example of this on standard library / large scale project ?
– despacito2012
Nov 20 '18 at 7:45
Is there a concrete example of this on standard library / large scale project ?
– despacito2012
Nov 20 '18 at 7:45
add a comment |
1 Answer
1
active
oldest
votes
You could move the DB
interface in to a different package, then the worker
and listener
packages could both use it.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53381694%2fwhere-should-we-define-go-interface-in-multiple-consumer-scenario-what-about-i%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You could move the DB
interface in to a different package, then the worker
and listener
packages could both use it.
add a comment |
You could move the DB
interface in to a different package, then the worker
and listener
packages could both use it.
add a comment |
You could move the DB
interface in to a different package, then the worker
and listener
packages could both use it.
You could move the DB
interface in to a different package, then the worker
and listener
packages could both use it.
answered Nov 20 '18 at 0:54


EvanEvan
1
1
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53381694%2fwhere-should-we-define-go-interface-in-multiple-consumer-scenario-what-about-i%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
2
It's fine to duplicate it, but the given code doesn't need to have either copy because it's never referenced. Define an interface where it is consumed.
– Adrian
Nov 19 '18 at 19:55
Is there a concrete example of this on standard library / large scale project ?
– despacito2012
Nov 20 '18 at 7:45