Explain the use of Go's structs and composition for defining and using composite types and structures in Go programs?