Communitygithub.com

netresearch/go-development-skill

에이전트 스킬: 엔터프라이즈 Go 개발 패턴 - 탄력적인 서비스, 테스팅 | Claude Code 호환

go-development-skill란 무엇인가요?

이 스킬은 Go 개발자를 위한 에이전트 스킬로, 엔터프라이즈급 Go 서비스를 개발할 때 필요한 일관된 패턴과 모범 사례를 제공합니다. Claude Code와 호환되며, 타입 안전성, 일관성, 테스팅, 명명 규칙 등 핵심 원칙을 정의하여 코드 품질을 높이고 유지보수성을 개선합니다. 또한 security-audit, enterprise-readiness, github-project와 같은 관련 스킬을 리뷰 시 함께 호출하도록 요구하여 보안 및 엔터프라이즈 준수 상태를 보장합니다. 이 스킬은 golangci-lint, govulncheck, go vet 등 다양한 품질 게이트를 통해 정적 분석, 취약점 스캔, 경쟁 조건 탐지를 자동화하며, go-cron, LDAP, Docker, API 설계 등 다양한 참조 문서를 로드하여 상황에 맞는 패턴을 적용할 수 있습니다. Go 1.26의 최신 기능(예: errors.AsType[T])을 활용한 현대화와 stdlib 취약점 수정 절차도 포함되어 있어, 안전하고 최신 상태의 Go 코드베이스를 유지하는 데 도움을 줍니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add netresearch/go-development-skill

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Go 개발 패턴

필수 워크플로

리뷰 시 관련 스킬 호출: security-audit (OWASP), enterprise-readiness (OpenSSF/SLSA), github-project (브랜치 보호). 모두 필수입니다.

핵심 원칙

타입 안전성

  • 피해야 할 것: interface{} (any 사용), sync.Map, 분산된 타입 단언, 리플렉션
  • 선호: 제네릭 [T any], errors.AsType[T] (Go 1.26), 구체적 타입
  • 업그레이드 후 go fix ./... 실행

일관성

  • 문제 도메인당 하나의 패턴
  • 기존 코드베이스 패턴과 일치
  • 전체적으로 리팩터링하거나 전혀 하지 않음
  • 설정 우선순위: 기본값 < 설정 파일 < 환경 변수 < 플래그

테스팅

  • 빌드 태그로 테스트 계층 격리: unit (기본값), integration, e2e
  • 항상 t.Parallel(), t.Helper(), 테이블 기반 서브테스트 사용
  • log/slog를 직접 사용 — 사용자 정의 Logger 인터페이스로 감싸지 않음

규칙

  • 오류: 소문자, 구두점 없음 (errors.New("invalid input"))
  • 명명: ID, URL, HTTP (Id, Url, Http 아님)
  • 오류 래핑: fmt.Errorf("failed to process: %w", err)

참조 자료

Git 훅: ls lefthook.yml 2>/dev/null && lefthook install || echo "lefthook을 추가하세요 — references/lefthook-template.md 참조"

필요 시 로드:

참조목적
references/architecture.md패키지 구조, 설정 관리, 미들웨어 체인
references/logging.mdlog/slog를 사용한 구조적 로깅, logrus에서 마이그레이션
references/cron-scheduling.mdgo-cron 패턴: 명명된 작업, 런타임 업데이트, 컨텍스트, 복원력
references/resilience.md재시도 로직, 정상 종료, 컨텍스트 전파
references/docker.mdDocker 클라이언트 패턴, 버퍼 풀링
references/ldap.mdLDAP/Active Directory 통합
references/testing.md테스트 전략, 빌드 태그, 테이블 기반 테스트
references/linting.mdgolangci-lint v2, staticcheck, 코드 품질
references/api-design.md비트마스크 옵션, 함수형 옵션, 빌더
references/fuzz-testing.mdGo 퍼징 패턴, 보안 시드
references/contracts-and-invariants.md계약, 불변 조건, 속성 테스트
references/mutation-testing.mdGremlins 설정, 테스트 품질 측정
references/makefile.mdCI/CD용 표준 Makefile 인터페이스
references/modernization.mdGo 1.26 모더나이저, go fix, errors.AsType[T], wg.Go()
references/lefthook-template.mdGo 프로젝트 Git 훅을 위한 바로 사용 가능한 lefthook.yml
references/reusable-workflows.md재사용 가능한 Actions 워크플로 호출자, 권한 전파, 릴리스 게이트 출력
references/single-build-release.md단일 빌드 릴리스: 한 번 크로스 컴파일하여 릴리스+컨테이너에 재사용
references/awesome-go-submission.mdawesome-go 제출: CI 구문 분석 PR 본문, 항목 형식, 이름 충돌

품질 게이트

리뷰 완료 전에 다음을 실행:

golangci-lint run --timeout 5m    # 린팅
go vet ./...                       # 정적 분석
staticcheck ./...                  # 추가 검사
govulncheck ./...                  # 취약점 스캔
go test -race ./...                # 경쟁 조건 탐지

Stdlib 취약점 수정

govulncheck에서 stdlib 취약점이 보고된 경우: vuln.go.dev를 통해 수정 버전 확인, go.mod에서 go X.Y.Z 업데이트, go mod tidy 실행. 브랜치 보호가 있는 리포지토리는 PR 브랜치를 사용하세요.


기여: https://github.com/netresearch/go-development-skill 에 개선 사항 제출

관련 스킬