Go는 어떻게 구조체 복사를 감지할까? sync.noCopy의 비밀

How Go detects struct copies with sync.noCopy

Go는 어떻게 구조체 복사를 감지할까? sync.noCopy의 비밀

Go의 sync 패키지에 있는 Mutex, Once, Map 등에는 noCopy라는 특별한 필드가 있습니다. 이 필드는 컴파일러가 아닌 go vet의 copylocks 검사기가 복사 금지 타입을 찾는 데 사용됩니다. noCopy는 Lock과 Unlock 메서드를 가진 빈 구조체로, 포인터가 sync.Locker 인터페이스를 구현하게 하여 검사기가 감지할 수 있게 합니다. 이 글은 noCopy의 작동 원리, 왜 Lock과 Unlock 메서드가 필요한지, 직접 타입에 추가하는 방법과 복사 시 발생할 수 있는 문제(예: WaitGroup이 영원히 대기)를 설명합니다.

noCopy 마커는 Go 컴파일러에 특별한 규칙을 추가하지 않습니다. 여전히 sync.Map을 사용한 후 복사할 수 있습니다.

같은 날의 다른 소식

2026-08-17