code: func (c *EtcdLockClient) Init() error {
  	sem := newSemaphore()
  	b, err := json.Marshal(sem)
  	if err != nil {
  		return err
  	}
  
  	if _, err := c.keyapi.Create(context.Background(), c.keypath, string(b)); err != nil {
  		eerr, ok := err.(client.Error)
  		if ok && eerr.Code == client.ErrorCodeNodeExist {
  			return nil
  		}
  
  		return err
  	}
  
  	return nil
  }
docs: // Init sets an initial copy of the semaphore if it doesn't exist yet.