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

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