github.com/serversong/goreporter@v0.0.0-20200325104552-3cfaf44fd178/linters/interfacer/testdata/files/fields.go (about) 1 package foo 2 3 type Closer interface { 4 Close() error 5 } 6 7 type st struct { 8 field int 9 m map[int]int 10 } 11 12 func (s *st) Close() error { 13 return nil 14 } 15 16 func (s *st) Lock() {} 17 18 func (s *st) Unlock() {} 19 20 func Foo(s *st) { 21 s.Close() 22 s.field = 3 23 } 24 25 func FooWrong(s *st) { // WARN s can be Closer 26 s.Close() 27 } 28 29 type st2 struct { 30 st1 *st 31 } 32 33 func (s *st2) Close() error { 34 return nil 35 } 36 37 func Foo2(s *st2) { 38 s.Close() 39 s.st1.field = 3 40 } 41 42 func Foo2Wrong(s *st2) { // WARN s can be Closer 43 s.Close() 44 } 45 46 func FooPassed(s *st) { 47 s.Close() 48 s2 := s 49 s2.field = 2 50 } 51 52 func FooPassedWrong(s *st) { // WARN s can be Closer 53 s.Close() 54 s2 := s 55 s2.Close() 56 } 57 58 func FooBuiltinArg(s *st) func(int) { 59 s.Lock() 60 s.Unlock() 61 delete(s.m, 3) 62 return nil 63 }