gitee.com/wgliang/goreporter@v0.0.0-20180902115603-df1b20f7c5d0/linters/interfacer/testdata/files/params.go (about) 1 package foo 2 3 type Closer interface { 4 Close() error 5 } 6 7 type Reader interface { 8 Read(p []byte) (n int, err error) 9 } 10 11 type ReadCloser interface { 12 Reader 13 Closer 14 } 15 16 type Seeker interface { 17 Seek(int64, int) (int64, error) 18 } 19 20 type ReadSeeker interface { 21 Reader 22 Seeker 23 } 24 25 func Args(rc ReadCloser) { 26 b := make([]byte, 10) 27 rc.Read(b) 28 rc.Close() 29 } 30 31 func ArgsWrong(rc ReadCloser) { // WARN rc can be Reader 32 b := make([]byte, 10) 33 rc.Read(b) 34 } 35 36 func ArgsLit(rs ReadSeeker) { 37 b := make([]byte, 10) 38 rs.Read(b) 39 rs.Seek(20, 0) 40 } 41 42 func ArgsLitWrong(rs ReadSeeker) { // WARN rs can be Seeker 43 rs.Seek(20, 0) 44 } 45 46 func ArgsLit2(rs ReadSeeker) { 47 rs.Read([]byte{}) 48 rs.Seek(20, 0) 49 } 50 51 func ArgsLit2Wrong(rs ReadSeeker) { // WARN rs can be Reader 52 rs.Read([]byte{}) 53 } 54 55 func ArgsNil(rs ReadSeeker) { 56 rs.Read(nil) 57 rs.Seek(20, 0) 58 } 59 60 func ArgsNilWrong(rs ReadSeeker) { // WARN rs can be Reader 61 rs.Read(nil) 62 } 63 64 type St struct{} 65 66 func (s St) Args(rc ReadCloser) { 67 var b []byte 68 rc.Read(b) 69 rc.Close() 70 } 71 72 func (s St) ArgsWrong(rc ReadCloser) { // WARN rc can be Reader 73 b := make([]byte, 10) 74 rc.Read(b) 75 } 76 77 type argBad struct{} 78 79 func (a argBad) Read(n int) (int, error) { 80 return 0, nil 81 } 82 83 func (a argBad) Close(n int) error { 84 return nil 85 } 86 87 type argGood struct{} 88 89 func (a argGood) Read(p []byte) (int, error) { 90 return 0, nil 91 } 92 93 func ArgsMismatch(a argBad) { 94 a.Read(10) 95 } 96 97 func ArgsMatch(a argGood) { // WARN a can be Reader 98 b := make([]byte, 10) 99 a.Read(b) 100 } 101 102 func ArgsMismatchNum(a argBad) { 103 a.Close(3) 104 } 105 106 func ArgsExtra() { 107 println(12, "foo") 108 } 109 110 func BuiltinExtra(s string) { 111 i := 2 112 b := make([]byte, i) 113 _ = append(b, s...) 114 }