Home  >  Article  >  Backend Development  >  Parameter passing methods in Golang

Parameter passing methods in Golang

巴扎黑
巴扎黑Original
2017-09-09 11:07:052359browse

Parameter passing means that during the transfer process of the program, the actual parameters will pass the parameter values ​​to the corresponding formal parameters, and then the process of data processing and return is implemented in the function. The following article mainly introduces it to you. Regarding relevant information about parameter passing in Golang, friends in need can refer to it.

Preface

This article mainly introduces to you the relevant content about Golang parameter passing, and shares it for your reference and study. There is not much to say below. Having said that, let’s take a look at the detailed introduction.

Regarding parameter passing, there is this sentence in the Golang documentation:

after they are evaluated, the parameters of the call are passed by value to the

function and the called function begins execution.

Function call parameters are all passed by value, not by pointer or reference. It has been derived from testing that when the parameter variable is a pointer or implicit pointer type, the parameter passing method is also by value (copy of the pointer itself)

Slice is one of the most commonly used data structures. Slice is used below. As an example, explain Golang’s parameter passing mechanism.

Slice data structure is as follows:

##Sample code:


package main

import "fmt"

func main(){
 slice := make([]int, 3, 5)
 fmt.Println("before:", slice)
 changeSliceMember(slice)
 fmt.Println("after:", slice)
}

func changeSliceMember(slice []int) {
 if len(slice) > 1 {
 slice[0] = 9
 }
}

The function execution result is:


befor:[0 0 0]
after:[9 0 0]

Explanation:

As can be seen from the data structure diagram, Slice can be understood as a structure type, including three fields: the address of the first element of the underlying array, the array len, and the capacity, and the slice object. During the parameter value transfer process, the values ​​of the three fields are passed. In fact, the memory address of the slice in the changeSliceMember function is different from the memory address of the slice in main, but the field values ​​are the same, and the first field The value of Pointer is the address of the first element of the underlying array, so the element content can be changed directly.

Can be compared with the following code to understand:


package main

func main() {
 value := new(int)
 modifyFunc(value)
 println("main:", value)
}

func modifyFunc(value *int) {
 value = nil
 println("modifyFunc:", value)
}

Execution result:


modifyFunc: 0x0
main: 0xc820049f30

It can be seen that even if the value is passed as a pointer, the variable value has not changed The value in main, because the value of value in modifyFunc is a pointer, is the same as the value in main, but the two objects themselves are two objects. Readers can understand it in detail

The above is the detailed content of Parameter passing methods in Golang. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn