golang function closure parameter passing

王林
Release: 2024-04-22 16:15:01
Original
1158 people have browsed it

In Go language, closures can pass parameter values ​​or references. Passing a value creates a copy of the value in the closure, and changes to that copy are only effective within the closure and do not affect the original parameter; passing a reference creates a pointer to the parameter in the closure, and changes to the pointer Update original parameters. When a parameter is passed by value, the value of the original parameter remains unchanged, whereas when a parameter is passed by reference, the value of the original parameter is modified.

golang function closure parameter passing

Parameter passing in Go function closure

Introduction

In Go In the language, a closure is a function whose scope contains the scope of its creating function. This allows the closure to access and modify variables declared in the creating function, even after the creating function returns.

Parameter passing

When passing parameters in a closure, you need to consider whether the passed parameter is a value or a reference.

  • Passing value: Passing the value of a parameter creates a copy of that value in the closure. Any changes made to this copy are limited to the closure and do not affect the original parameters.
  • Passing by reference: Passing a reference to a parameter creates a pointer to the parameter in the closure. Any changes to this pointer update the original parameter.

Practical example

The following example demonstrates how to use closures to pass parameters and modify external variables:

package main

import "fmt"

func main() {
    // 声明一个外层函数并传递一个值
    counter := func(num int) {
        num++ // 对参数的值进行修改
        fmt.Println("Value in closure:", num)
    }

    // 调用外层函数,传递一个值
    num := 10
    counter(num)

    fmt.Println("Value outside closure:", num) // 值不会改变
}
Copy after login

Output:

Value in closure: 11
Value outside closure: 10
Copy after login

In this example, counter is a closure that modifies the value of num. However, since num is passed by value, modifications to num are limited to the closure, while the outer variable num remains unchanged.

Passing by reference

To pass parameters by reference, you can use pointers:

package main

import "fmt"

func main() {
    // 声明一个外层函数并传递一个引用
    counter := func(num *int) {
        *num++ // 对指针所指向的值进行修改
        fmt.Println("Value in closure:", *num)
    }

    // 调用外层函数,传递一个引用
    num := 10
    counter(&num)

    fmt.Println("Value outside closure:", num) // 值会改变
}
Copy after login

Output:

Value in closure: 11
Value outside closure: 11
Copy after login

In this example , num is passed through a pointer, which allows the closure to modify the value of the external variable num.

The above is the detailed content of golang function closure parameter passing. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template