I'm new to golang. I'm starting with a tour of go.
Here is the [go playground link](https://play.golang.org/p/_Y1u3aVoPfL)

Here is the code :

```
package main

import "fmt"

type I interface {
    M()
}

type T struct {
    S string
}

func (t *T) M() {

    fmt.Println(t.S)
}

func main() {
    var i I

    var t *T 
    i = t

    i.M()
}

```

It is panicing

> 
> panic: runtime error: invalid memory address or nil pointer
>  dereference
>  [signal SIGSEGV: segmentation violation code=0xffffffff addr=0x0 
>  pc=0xd3ea6]
>  goroutine 1 [running]:
>  main.(\*T).M(0x0, 0x434070) /tmp/sandbox696069628/main.go:15 +0x26
>  main.main() /tmp/sandbox696069628/main.go:24 +0x40
> 
> 
> 

However when I change 

```
var t *T 
i = t

```

to 

```
var t T 
i = &t

```

It does not panic anymore

Shouldn't the behavior be similar in both cases. If not, why?