code: func serviceWatch(params map[string]interface{}) (WatcherFunc, error) {
  	stale := false
  	if err := assignValueBool(params, "stale", &stale); err != nil {
  		return nil, err
  	}
  
  	var (
  		service string
  		tags    []string
  	)
  	if err := assignValue(params, "service", &service); err != nil {
  		return nil, err
  	}
  	if service == "" {
  		return nil, fmt.Errorf("Must specify a single service to watch")
  	}
  	if err := assignValueStringSlice(params, "tag", &tags); err != nil {
  		return nil, err
  	}
  
  	passingOnly := false
  	if err := assignValueBool(params, "passingonly", &passingOnly); err != nil {
  		return nil, err
  	}
  
  	fn := func(p *Plan) (BlockingParamVal, interface{}, error) {
  		health := p.client.Health()
  		opts := makeQueryOptionsWithContext(p, stale)
  		defer p.cancelFunc()
  		nodes, meta, err := health.ServiceMultipleTags(service, tags, passingOnly, &opts)
  		if err != nil {
  			return nil, nil, err
  		}
  		return WaitIndexVal(meta.LastIndex), nodes, err
  	}
  	return fn, nil
  }
docs: // serviceWatch is used to watch a specific service for changes