기본 튜토리얼: Go WaitGroup 및 Golang의 애플리케이션
기본 튜토리얼: Go WaitGroup과 Golang의 응용 프로그램에는 특정 코드 예제가 필요합니다.
머리말:
Golang(Go 언어)에서는 동시 프로그램을 작성하는 것이 일반적인 작업입니다. Golang은 다양한 동시성 기본 요소와 API를 제공하며 중요한 도구 중 하나는 WaitGroup입니다. 이 기사에서는 WaitGroup의 개념과 사용법을 소개하고 몇 가지 구체적인 코드 예제를 제공합니다.
1. WaitGroup의 개념
WaitGroup은 Golang의 동시성 기본 요소로, 고루틴 그룹의 완료를 기다리는 데 사용됩니다. WaitGroup은 초기 값이 0인 카운터를 내부적으로 유지 관리합니다. 각 코루틴이 실행되기 시작하면 카운터가 1씩 증가합니다. 코루틴이 끝나면 카운터는 1씩 감소합니다. 메인 스레드는 카운터가 0에 도달할 때까지, 즉 모든 코루틴이 실행될 때까지 Wait() 메서드를 통해 차단할 수 있습니다.
2. WaitGroup의 기본 사용법
WaitGroup을 사용하려면 다음 단계를 따라야 합니다.
-
WaitGroup 개체 만들기: 먼저 "sync" 패키지를 가져와 WaitGroup 개체를 만들어야 합니다.
import "sync" var wg sync.WaitGroup
로그인 후 복사 WaitGroup에 코루틴 추가: 실행될 각 코루틴에 대해 카운터를 증가시키고 go 키워드를 사용하여 새 코루틴에서 작업을 수행해야 합니다.
wg.Add(1) go func() { // 协程的具体逻辑 // ... wg.Done() // 协程执行完成后减少计数器 }()
로그인 후 복사코루틴 완료 대기: 메인 스레드는 Wait() 메서드를 사용하여 카운터가 0이 될 때까지, 즉 모든 코루틴이 실행될 때까지 차단할 수 있습니다.
wg.Wait()
로그인 후 복사
샘플 코드:
다음은 Golang에서 WaitGroup을 적용하는 방법을 보여주는 구체적인 코드 예제입니다. 이 예제에서는 후속 논리를 계속하기 전에 WaitGroup을 사용하여 여러 코루틴이 완료될 때까지 기다립니다.
package main import ( "fmt" "sync" "time" ) func main() { var wg sync.WaitGroup for i := 0; i < 5; i++ { wg.Add(1) go func(num int) { defer wg.Done() time.Sleep(time.Second) // 模拟长时间的任务 fmt.Printf("协程 %d 完成 ", num) }(i) } fmt.Println("等待所有协程完成...") wg.Wait() fmt.Println("所有协程已完成!") }
위의 예에서는 5개의 코루틴 실행을 시뮬레이션했으며 각 코루틴은 1초 동안 대기했습니다. WaitGroup을 사용하면 모든 코루틴이 실행될 때까지 기본 스레드가 차단됩니다. 출력에서 코루틴이 병렬로 실행되기 때문에 완료되는 순서가 고정되어 있지 않음을 알 수 있습니다.
3. WaitGroup에 대한 참고 사항
WaitGroup을 사용할 때 다음 주의 사항을 따라야 합니다.
- Wait()를 호출하기 전에 각 코루틴에서 Done()을 호출하여 카운터가 감소하는지 확인해야 합니다. 그렇지 않으면 메인 스레드가 영원히 차단됩니다.
- WaitGroup은 값으로 전달되므로 함수나 메서드에 전달할 때 값의 복사본이 아닌 포인터를 전달해야 합니다.
- 서로를 기다리기 위해 여러 WaitGroup 개체를 사용하지 마세요. 교착 상태가 발생할 수 있습니다.
결론:
WaitGroup은 Golang의 매우 유용한 동시성 기본 요소로, 코루틴 그룹이 완료될 때까지 편리하게 기다릴 수 있습니다. 이 문서에서는 WaitGroup의 기본 개념과 사용법을 소개하고 구체적인 코드 예제를 제공합니다. 이 기사를 공부하면 Golang에서 WaitGroup의 사용을 더 잘 이해하고 적용하는 데 도움이 되기를 바랍니다.
위 내용은 기본 튜토리얼: Go WaitGroup 및 Golang의 애플리케이션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Go에서는 gorilla/websocket 패키지를 사용하여 WebSocket 메시지를 보낼 수 있습니다. 특정 단계: WebSocket 연결을 설정합니다. 문자 메시지 보내기: WriteMessage(websocket.TextMessage,[]byte("Message"))를 호출합니다. 바이너리 메시지 보내기: WriteMessage(websocket.BinaryMessage,[]byte{1,2,3})를 호출합니다.

Go에서 함수 수명주기에는 정의, 로드, 연결, 초기화, 호출 및 반환이 포함됩니다. 변수 범위는 함수 수준과 블록 수준으로 구분됩니다. 함수 내의 변수는 내부적으로 표시되지만 블록 내의 변수는 블록 내에서만 표시됩니다. .

Go에서는 정규식을 사용하여 타임스탬프를 일치시킬 수 있습니다. ISO8601 타임스탬프를 일치시키는 데 사용되는 것과 같은 정규식 문자열을 컴파일합니다. ^\d{4}-\d{2}-\d{2}T \d{ 2}:\d{2}:\d{2}(\.\d+)?(Z|[+-][0-9]{2}:[0-9]{2})$ . regexp.MatchString 함수를 사용하여 문자열이 정규식과 일치하는지 확인합니다.

Go와 Go 언어는 서로 다른 특성을 지닌 서로 다른 개체입니다. Go(Golang이라고도 함)는 동시성, 빠른 컴파일 속도, 메모리 관리 및 크로스 플랫폼 이점으로 유명합니다. Go 언어의 단점은 다른 언어에 비해 생태계가 덜 풍부하고 구문이 더 엄격하며 동적 타이핑이 부족하다는 점입니다.

메모리 누수로 인해 파일, 네트워크 연결, 데이터베이스 연결 등 더 이상 사용하지 않는 리소스를 닫는 방식으로 Go 프로그램 메모리가 지속적으로 증가할 수 있습니다. 더 이상 강력하게 참조되지 않는 경우 약한 참조를 사용하여 메모리 누수 및 가비지 수집 대상 개체를 방지합니다. go 코루틴을 사용하면 메모리 누수를 방지하기 위해 종료 시 코루틴 스택 메모리가 자동으로 해제됩니다.

IDE를 사용하여 Go 함수 문서 보기: 함수 이름 위에 커서를 놓습니다. 단축키(GoLand: Ctrl+Q, VSCode: GoExtensionPack 설치 후 F1을 누르고 "Go:ShowDocumentation" 선택)를 누릅니다.

단위 테스트 동시 기능은 동시 환경에서 올바른 동작을 보장하는 데 도움이 되므로 매우 중요합니다. 동시 기능을 테스트할 때는 상호 배제, 동기화, 격리와 같은 기본 원칙을 고려해야 합니다. 동시 기능은 경쟁 조건을 시뮬레이션하고, 테스트하고, 결과를 확인하여 단위 테스트할 수 있습니다.

Go의 함수에 지도를 전달하면 기본적으로 복사본이 생성되며 복사본을 수정해도 원본 지도에는 영향을 미치지 않습니다. 원본 지도를 수정해야 하는 경우 포인터를 통해 전달할 수 있습니다. 빈 맵은 기술적으로 nil 포인터이기 때문에 주의해서 처리해야 하며, 비어 있지 않은 맵을 기대하는 함수에 빈 맵을 전달하면 오류가 발생합니다.
