code: func (s *Semaphore) Lock(h string) error {
  	if s.Semaphore <= 0 {
  		return fmt.Errorf("semaphore is at %v", s.Semaphore)
  	}
  
  	if err := s.addHolder(h); err != nil {
  		return err
  	}
  
  	s.Semaphore = s.Semaphore - 1
  
  	return nil
  }
docs: // Lock adds a holder with id h to the semaphore
  // It adds the id h to the list of holders, returning ErrExist the id already
  // exists, then it subtracts one from the semaphore. If the semaphore is already
  // held by the maximum number of people it returns an error.