code: func (w *watcher) Watch(ctx context.Context, key string, rev int64, recursive bool, pred storage.SelectionPredicate) (watch.Interface, error) {
  	if recursive && !strings.HasSuffix(key, "/") {
  		key += "/"
  	}
  	wc := w.createWatchChan(ctx, key, rev, recursive, pred)
  	go wc.run()
  	return wc, nil
  }
docs: // Watch watches on a key and returns a watch.Interface that transfers relevant notifications.
  // If rev is zero, it will return the existing object(s) and then start watching from
  // the maximum revision+1 from returned objects.
  // If rev is non-zero, it will watch events happened after given revision.
  // If recursive is false, it watches on given key.
  // If recursive is true, it watches any children and directories under the key, excluding the root key itself.
  // pred must be non-nil. Only if pred matches the change, it will be returned.