.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / honnef.co / go / tools@v0.1.1 / staticcheck / testdata / src / CheckTypedNilInterface / real.go
1 package pkg
2
3 import "log"
4
5 type iface interface{ m() }
6
7 type t1 struct{ int }
8
9 func (t *t1) m() { log.Println(t.int) }
10
11 type internalMessage struct{ v *t1 }
12
13 func f(msg chan internalMessage, input int) {
14         k := &t1{input}
15
16         if input > 2 {
17                 k = nil
18         }
19         msg <- internalMessage{k}
20
21 }
22
23 func SyncPublicMethod(input int) iface {
24         ch := make(chan internalMessage)
25         go f(ch, input)
26         answer := <-ch
27         // Problem: if answer.v == nil then this will created typed nil iface return value
28         return answer.v
29 }
30
31 func main() {
32         for i := 0; i < 10; i++ {
33                 k := SyncPublicMethod(i)
34                 if k == nil { // want `this comparison is never true`
35                         log.Println("never printed")
36                         return
37                 }
38
39                 // Will panic.
40                 k.m()
41         }
42 }