Demystifying new() and make() Functions in Go