The return value of the Go function adopts the value passing method, that is, the modification of the return value within the function will not affect the value in the calling code. However, with pointer passing, we can pass the memory address of the variable so that modifications to the pointer are reflected in the original variable of the calling code. This method is often used in scenarios where a collection of values such as slices needs to be modified.
Go language function return value transfer method
In the Go language, the return value of a function usually uses the value transfer method. This means that modifications made to the return value within a function do not affect the value in the code that calls the function.
Value passing
Let us consider the following function:
func increment(num int) { num = num + 1 } func main() { myNum := 5 increment(myNum) fmt.Println(myNum) // 输出:5 }
In this function, even if we modify the num
variable value, but it is only valid within the function. myNum
in the main
function still remains at 5 because the function is passed by value.
Passing by reference
Sometimes, we need to pass modifications to variables back to the function calling code. For this we can use pointer passing. When we pass a pointer, we are actually passing the memory address of the variable, not the variable itself.
Let's modify the above example:
func increment(num *int) { *num = *num + 1 } func main() { myNum := 5 increment(&myNum) fmt.Println(myNum) // 输出:6 }
By passing &myNum
, we are passing the address of the myNum
variable to increment
function. Now, any modifications made to the pointer will be reflected in the original variable in the function calling code.
Practical case
Let us consider a function that needs to modify a slice. A slice is a collection of values, and is usually passed by value. If we want to modify the slice within the function, we have to pass it using a pointer.
func removeElement(s []int, idx int) { copy(s[idx:], s[idx+1:]) s[len(s)-1] = 0 s = s[:len(s)-1] } func main() { mySlice := []int{1, 2, 3, 4, 5} removeElement(&mySlice, 1) fmt.Println(mySlice) // 输出:[]1 3 4 5 }
In the removeElement
function, we modify the original slice by passing the &mySlice
pointer.
By understanding and using appropriate return value passing methods, we can write fully functional and efficient Go code.
The above is the detailed content of How to pass return value of golang function. For more information, please follow other related articles on the PHP Chinese website!