code: func (c *client) query(params *LookupParams) error {
  	var serviceName, serviceInstanceName string
  	serviceName = fmt.Sprintf("%s.%s.", trimDot(params.Service), trimDot(params.Domain))
  	if params.Instance != "" {
  		serviceInstanceName = fmt.Sprintf("%s.%s", params.Instance, serviceName)
  	}
  
  	// send the query
  	m := new(dns.Msg)
  	if serviceInstanceName != "" {
  		m.Question = []dns.Question{
  			dns.Question{serviceInstanceName, dns.TypeSRV, dns.ClassINET},
  			dns.Question{serviceInstanceName, dns.TypeTXT, dns.ClassINET},
  		}
  		m.RecursionDesired = false
  	} else {
  		m.SetQuestion(serviceName, dns.TypePTR)
  		m.RecursionDesired = false
  	}
  	if err := c.sendQuery(m); err != nil {
  		return err
  	}
  
  	return nil
  }
docs: // Performs the actual query by service name (browse) or service instance name (lookup),
  // start response listeners goroutines and loops over the entries channel.