mirror of
https://github.com/golang/go.git
synced 2025-05-05 15:43:04 +00:00
reverting my changes and opening a discussion
parent
b61e691f20
commit
bd53b910b2
@ -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
|
interface type, not the package that implements those values. The
|
||||||
implementing package should return concrete (usually pointer or struct)
|
implementing package should return concrete (usually pointer or struct)
|
||||||
types: that way, new methods can be added to implementations without
|
types: that way, new methods can be added to implementations without
|
||||||
requiring extensive refactoring, and this will enable the struct to implement
|
requiring extensive refactoring.
|
||||||
more than one interface and be accepted/evaluated to all of them in different functions
|
|
||||||
|
|
||||||
Do not define interfaces on the implementor side of an API "for mocking";
|
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
|
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{ … } }
|
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
|
## Line Length
|
||||||
|
|
||||||
There is no rigid line length limit in Go code, but avoid uncomfortably long lines.
|
There is no rigid line length limit in Go code, but avoid uncomfortably long lines.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user