Here are some differences between pointers and values in parameters in Go.
- Pointers can be used to modify the value of a variable in the calling function, whereas the called function cannot change values in parameters.
- When a value is passed as a parameter, a copy of the value is created and passed to the function. In contrast, when a pointer is passed, the function receives the value’s memory address, which allows the function to modify the original value. This can be particularly useful when working with large data structures, as passing pointers can save memory.
- When a function returns a value, it can either return a copy of the value or a pointer to the value. If a pointer is returned, it allows the calling function to modify the original value.
- Pointers in Go can be nil, which means they don’t point to any valid memory address, while values cannot be nil.
- Pointers can increase the code’s complexity and make it more error-prone. Therefore, it can be carefully managed to avoid issues like memory leaks, null pointer exceptions, and dangling pointers.
- In Go, all variables are passed by value, so when a function is called, the values of the arguments are copied to the function’s parameters. If the argument is a pointer, the pointer value is copied, but not the data it points to.
- When a function returns a value, a copy of the value is returned. If the value is a pointer, the pointer value is copied, but not the data it points to.
- When a function returns a pointer, a copy of the pointer value is returned, not the data it points to.
- To modify the original value of a variable, you need to pass a pointer to the variable.
- To modify the original value of a struct, you need to pass a pointer to the struct.
Conclusion
Like many other programming languages, you can pass values and pointers as function parameters and return values in Go.
Using pointers can provide more flexibility and efficiency but requires more care and attention to avoid potential issues. On the other hand, using values is simpler and safer but may be less efficient and limit the ability to modify the original value.

Krunal Lathiya is a Software Engineer with over eight years of experience. He has developed a strong foundation in computer science principles and a passion for problem-solving. In addition, Krunal has excellent knowledge of Distributed and cloud computing and is an expert in Go Language.