gitee.com/wgliang/goreporter@v0.0.0-20180902115603-df1b20f7c5d0/linters/interfacer/testdata/files/used.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 St struct{} 17 18 func (s St) Read(p []byte) (int, error) { 19 return 0, nil 20 } 21 func (s St) Close() error { 22 return nil 23 } 24 func (s St) Other() {} 25 26 func FooCloser(c Closer) { 27 c.Close() 28 } 29 30 func FooSt(s St) { 31 s.Other() 32 } 33 34 func Bar(s St) { 35 s.Close() 36 FooSt(s) 37 } 38 39 func BarWrong(s St) { // WARN s can be Closer 40 s.Close() 41 FooCloser(s) 42 } 43 44 func extra(n int, cs ...Closer) {} 45 46 func ArgExtraWrong(s1 St) { // WARN s1 can be Closer 47 var s2 St 48 s1.Close() 49 s2.Close() 50 extra(3, s1, s2) 51 } 52 53 func Assigned(s St) { 54 s.Close() 55 var s2 St 56 s2 = s 57 _ = s2 58 } 59 60 func Declared(s St) { 61 s.Close() 62 var s2 St = s 63 _ = s2 64 } 65 66 func AssignedIface(s St) { // WARN s can be Closer 67 s.Close() 68 var c Closer 69 c = s 70 _ = c 71 } 72 73 func AssignedIfaceDiff(s St) { // WARN s can be ReadCloser 74 s.Close() 75 var r Reader 76 r = s 77 _ = r 78 } 79 80 func doRead(r Reader) { 81 b := make([]byte, 10) 82 r.Read(b) 83 } 84 85 func ArgIfaceDiff(s St) { // WARN s can be ReadCloser 86 s.Close() 87 doRead(s) 88 }