When Should Variables Be Initialized as Pointers vs. Values?

I am learning Backend development using Go. My first programming language was C, so I understand how pointers work but probably I forgot how to use them properly.

I bought a course on Udemy and Instructor created an instance like this:

func NewStorage(db *sql.DB) Storage {
  return Storage{
    Posts: &PostStore{db},
    Users: &UserStore{db},
  }
}

First of all, when we are giving te PostStore and UserStore to the Storage, we are creating them as "pointers" so in all app, we're gonna use the same stores (I guess this is kinda like how singleton classes works in OOP languages)

But why aren't we returning the Storage struct the same way? Another example is here:

  app := &application{
    config: cfg,
    store:  store,
  }

This time, we created the parent struct as pointer, but not the config and store.

How can I understand this? Should I work on Pointers? I know how they work but I guess not how to use them properly.

Edit

I think I'll study more about Pointers in Go, since I still can't figure it out when will we use pointers.

I couldn't answer all the comments but thank you everyone for guiding me!