From bd53b910b28c758eb7c595208ea5ecfd10b595fe Mon Sep 17 00:00:00 2001 From: Eslam Mahmoud Date: Mon, 22 Jul 2019 13:58:48 -0500 Subject: [PATCH] reverting my changes and opening a discussion --- CodeReviewComments.md | 30 +----------------------------- 1 file changed, 1 insertion(+), 29 deletions(-) diff --git a/CodeReviewComments.md b/CodeReviewComments.md index d6a9c708..536a0a22 100644 --- a/CodeReviewComments.md +++ b/CodeReviewComments.md @@ -351,8 +351,7 @@ Go interfaces generally belong in the package that uses values of the interface type, not the package that implements those values. The implementing package should return concrete (usually pointer or struct) types: that way, new methods can be added to implementations without -requiring extensive refactoring, and this will enable the struct to implement -more than one interface and be accepted/evaluated to all of them in different functions +requiring extensive refactoring. Do not define interfaces on the implementor side of an API "for mocking"; instead, design the API so that it can be tested using the public API of @@ -401,33 +400,6 @@ func (t Thinger) Thing() bool { … } func NewThinger() Thinger { return Thinger{ … } } ``` -```go -// DONOT DO THIS -package main -import ("io") -type Thinger interface { - Thing() bool -} -type defaultThinger struct{ } -func (t defaultThinger) Thing() bool { - return true -} -func (t defaultThinger) Read(p []byte) (n int, err error) { - return 0, nil -} -func NewThinger() Thinger { - return defaultThinger{ } -} -func main() { - testThinger(NewThinger()) - // will return cannot use NewThinger() (type Thinger) as type io.Reader in argument to testReader: Thinger does not implement io.Reader (missing Read method) - // if NewThinger() return defaultThinger it will work - testReader(NewThinger()) -} -func testReader(r io.Reader) {} -func testThinger(t Thinger) {} -``` - ## Line Length There is no rigid line length limit in Go code, but avoid uncomfortably long lines.