폐쇄란 무엇인가요?
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!