Is function declaration in Golang strict? : Why does this code work? The fuction `Introduce()` accept a pointer to `Person`
but when we create `p` - it is an object (not a pointer).
So is function declaration not strict?

    package main
    
    import "fmt"
    
    type Person struct {
    	Name string
    }
    
    func (p *Person) Introduce() {
    	fmt.Printf("Hi, I'm %s\n", p.Name)
    }
    
    func main() {
    
    	p := Person{Name: "Fedya"}
    	fmt.Println(p)
    	p.Introduce()
    
    	p1 := &Person{Name: "Fedya"}
    	fmt.Println(p1)
    	p1.Introduce()
    
    }