The Little (Go) Book of Semaphores
The Little Book of Semaphores, by professor Allen Downey, is a textbook that introduces the principles of synchronization for concurrent programming. It’s available under the GNU Free Documentation License. The book uses Python to illustrate the concepts, but I think Go is a much better fit for that purpose.
Semaphores are rarely seen in Go as such. The sync package provides synchronization primitives, for example, mutual exclusion locks and condition variables, but notably it doesn’t provide a semaphore.