>백엔드 개발 >Golang >golang 클로저의 용도는 무엇입니까?

golang 클로저의 용도는 무엇입니까?

(*-*)浩
(*-*)浩원래의
2019-12-27 14:16:553788검색

golang 클로저의 용도는 무엇입니까?

폐쇄란 무엇인가요?

Go 기능은 클로저일 수 있습니다. 클로저는 함수 본문 외부의 변수를 참조하는 함수 값입니다. (추천 학습: Go 推荐)

이 함수는 참조된 this의 변수에 액세스하고 할당할 수 있습니다. 즉, 이 함수는 이 변수에 "바인딩"됩니다.

클로저는 클래스의 인스턴스와 동일하고 함수 본문 외부의 변수는 이 인스턴스에 저장된 변수와 동일하다는 것은 신뢰할 수 없는 이해입니다.

클로저가 없으면 함수는 일회성 트랜잭션입니다. 함수가 실행된 후에는 함수의 변수 값을 변경할 수 없습니다(메모리가 해제되어야 함). 변수의 값이 됩니다. 변수가 해제되지 않는 한 함수는 항상 살아 있고 배타적이므로 나중에 함수의 변수 값을 변경할 수 있습니다(이렇게 하면 메모리가 회수되지 않기 때문입니다). 이동하면 항상 거기에 캐시됩니다).

클로저의 주요 의미

는 변수의 범위를 줄이고 전역 변수의 오염을 줄이는 것입니다. 글로벌 변수를 사용하여 다음과 같은 누적을 구현하면 글로벌 변수가 다른 변수에 의해 쉽게 오염될 수 있습니다.

동시에 n개의 누산기를 구현하려면 매번 n개의 전역 변수가 필요합니다.

백팩을 사용하여 생성된 각 누산기 myAdder1, myAdder2 := adder(), adder()는 자체적인 독립적 합계를 가지고 있습니다. 합계는 myAdder1.sum 및 myAdder2.sum으로 간주될 수 있습니다.

백팩을 활용해 각자의 상태에 따른 기능을 구현해보세요!

package main

import (
	"fmt"
)

func adder() func(int) int {
	sum := 0
	return func(x int) int {
		sum += x
		return sum
	}
}

func main() {
	myAdder := adder()
	
	// 从1加到10
	for i := 1; i <= 10; i++ {
		myAdder(i)
	}
	
	fmt.Println(myAdder(0))
	// 再加上45
	fmt.Println(myAdder(45))
}

결과:

55// 1+...+10
100

위 내용은 golang 클로저의 용도는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.