확신을 가지고 동시성 Go 애플리케이션을 구축하세요. race condition 과 리소스 누수를 방지하기 위한 goroutine, channel, worker pool, 우아한 셧다운을 위한 프로덕션 준비 패턴을 배우세요.
스킬 ZIP 다운로드
Claude에서 업로드
설정 → 기능 → 스킬 → 스킬 업로드로 이동
토글을 켜고 사용 시작
테스트해 보기
"go-concurrency-patterns" 사용 중입니다. channel 에서 작업을 처리하는 3 개의 worker 를 가진 worker pool 생성
예상 결과:
sync.WaitGroup 을 사용한 적절한 동기화와 함께 results channel 을 통해 결과를 수집하면서 작업을 동시에 처리하는 3 개의 worker 를 가진 worker pool 구현입니다.
"go-concurrency-patterns" 사용 중입니다. 동시 HTTP 요청을 위해 errgroup 사용 방법 보여주기
예상 결과:
이 예제는 golang.org/x/sync/errgroup 을 사용하여 여러 URL 을 동시에 가져오는 방법을 보여줍니다. 첫 번째 오류가 context propagation 을 통해 대기 중인 모든 요청을 취소합니다.
"go-concurrency-patterns" 사용 중입니다. 동시 작업을 제한하기 위한 semaphore 구현
예상 결과:
가중치 semaphore 를 위한 golang.org/x/sync/semaphore.Weighted 와 간단한 속도 제한을 위한 channel 기반 struct{} semaphore 의 두 가지 semaphore 접근 방식을 제공합니다.
보안 감사
안전All 44 static analysis findings are false positives from markdown-enclosed Go code examples. The skill contains legitimate educational content about Go concurrency patterns with no executable code or security risks.
품질 점수
만들 수 있는 것
동시성 마이크로서비스 구축
worker pool 을 사용하여 리소스를 효율적으로 관리하면서 여러 요청을 동시에 처리하는 확장 가능한 Go 서비스 생성
데이터 처리 파이프라인 구현
적절한 오류 처리와 cancellation 을 갖춘 fan-out/fan-in 파이프라인을 설계하여 대용량 데이터셋을 병렬로 처리
race condition 디버깅
적절한 동기화 패턴과 race detection 도구를 사용하여 기존 Go 코드의 동시성 버그 식별 및 수정
이 프롬프트를 사용해 보세요
5 개의 동시 worker 로 100 개의 작업을 처리하는 Go 의 worker pool 생성 방법 보여주기
SIGTERM 신호를 처리하고 in-flight 요청이 완료될 때까지 대기하는 우아한 셧다운을 갖춘 Go 서버 작성
스테이지당 5 개의 worker 로 3 개의 스테이지를 통해 항목을 처리하는 Go 의 fan-out/fan-in 파이프라인 생성
이 Go 코드를 검토하여 잠재적인 goroutine 누수를 식별한 다음 context cancellation 을 사용하여 수정하는 방법 보여주기
모범 사례
- 동시 작업에서 cancellation 과 deadline 을 위해 항상 context.Context 사용
- panic 을 방지하기 위해 sender 측에서만 channel 닫기
- goroutine 간 통신을 위해 mutex 보다 channel 선호
- sync.WaitGroup 또는 errgroup 을 사용하여 goroutine 완료 대기
피하기
- channel 이나 WaitGroup 과 같은 적절한 primitive 대신 동기를 위해 time.Sleep 사용
- receiver 측에서 channel 을 닫아 panic 발생
- ctx.Done() 확인을 잊어 goroutine 누수 발생
- 적절한 동기화 없이 goroutine 간 메모리 공유
자주 묻는 질문
Go 에서 동시성 (concurrent) 프로그래밍과 병렬성 (parallel) 프로그래밍의 차이점은 무엇인가요?
channel 과 mutex 중 언제 사용해야 하나요?
goroutine 누수를 어떻게 방지하나요?
sync.WaitGroup 의 목적은 무엇인가요?
Go 코드에서 race condition 을 어떻게 감지하나요?
buffered channel 과 unbuffered channel 의 차이점은 무엇인가요?
개발자 세부 정보
작성자
sickn33라이선스
MIT
리포지토리
https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/go-concurrency-patterns참조
main
파일 구조