When to use a value and pointer depends on what you're going to do with the data, and will affect how it's stored in memory.
If you plan to operate on the data only in your local function, use the value. The stores the data in the context of the local function itself (called the stack) and has almost no garbage collection overhead.
If you plan to pass the data elsewhere to another function, and you do not want the code in that function to affect this function's view of the data, use the value. That way, when you pass the data anywhere else, you'll be passing a copy of the data. This copy will exist on that function's local stack.
If you plan to pass the data elsewhere but want the changes that happen to it there to be visible to your code here, or if you data is too large to copy, use a pointer. When you have a pointer you're actually holding the memory address of the data instead of the data itself, so when you pass this address around all changes made anywhere affect the original data - the data itself is never copied. This is done by moving the data to a kind of global data storage system called the heap, and Go will delete the data off the heap only after it determines that all the places using that address are no longer functioning (the process called garbage collection).