> 백엔드 개발 > Golang > Go 언어 마이닝 피트 공유: 폐쇄 공유 변수 문제

Go 언어 마이닝 피트 공유: 폐쇄 공유 변수 문제

藏色散人
풀어 주다: 2021-04-12 11:27:49
앞으로
2577명이 탐색했습니다.

다음 튜토리얼 칼럼인 golang에서는 go 언어의 함정인 클로저 공유 변수 문제를 공유하겠습니다. 이것이 필요한 친구들에게 도움이 되기를 바랍니다!

Go 언어 마이닝 피트 공유: 폐쇄 공유 변수 문제

더 이상 고민할 필요 없이 코드와 주석만 살펴보겠습니다.

package mainimport (
    "fmt"
    "time")func main() {
    // 错误示例(打印出的结果是5个6)
    fmt.Println("closure buggy example...")
    for i := 1; i <= 5; i++ {
        // 每个goroutine共享一个变量,goroutine还没开始的时候,i已经变成了6
        go func() {
            fmt.Println(i)
        }()
    }
    time.Sleep(1 * time.Second)


    // 正确示例1:
    fmt.Println("normal example...")
    for i := 1; i <= 5; i++ {
        go func(i int) {   // 使用局部变量
            fmt.Println(i)
        }(i)
    }
    time.Sleep(1 * time.Second)

    // 正确示例2:
    fmt.Println("normal example 2...")
    for i := 1; i <= 5; i++ {
        i := i  // 为每个闭包创建一个变量
        go func() {
            fmt.Println(i)
        }()
    }
    time.Sleep(1 * time.Second)}
로그인 후 복사

실행하여 얻은 결과는 다음과 같습니다.

closure buggy example...66666normal example...52134normal example 2...52134
로그인 후 복사

코드 주석에서 이유와 해결 방법을 확인하세요. 첫 번째 예는 잘못된 예이고, 두 번째와 세 번째 예는 올바른 예입니다.

위 내용은 Go 언어 마이닝 피트 공유: 폐쇄 공유 변수 문제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:learnku.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿