Explain this program

package main

import (
	"fmt"
	
	)



type sun struct {i int}

func (s sun) meth1(){fmt.Println(s)}
func (s *sun) meth2(){fmt.Println(s)}

type dal struct {
   
    *sun
}


func main() {
  
    var z sun= sun{4}
    var x = dal{&z}
    
   
    var f = (x).meth1//dal{&z}
    var d = (x).meth2//dal{&z}
  
    z= sun{44}
    x = dal{}
   
    f()
    d()
 
   _ =x
   
    }