micro/go-micro · error
missing service instance name
Error message
missing service instance name
What it means
NewMDNSService requires a non-empty instance name — the human-readable service instance label advertised on the network (e.g. "My Printer"). An empty string fails the initial sanity checks and returns this error before any network setup.
Solutions
- Pass a non-empty instance name, e.g. NewMDNSService("My App", "_http._tcp", "", "", port, ips, txt)
- Validate config/environment before registration and substitute a default name if empty
- In Register(), ensure the caller-provided instance is populated before constructing the service
Example fix
// before
svc, err := NewMDNSService(instance, "_http._tcp", "", "", 8080, ips, nil) // instance == ""
// after
if instance == "" {
instance = filepath.Base(os.Args[0])
}
svc, err := NewMDNSService(instance, "_http._tcp", "", "", 8080, ips, nil) Defensive patterns
Strategy: validation
Validate before calling
if strings.TrimSpace(instance) == "" {
instance = filepath.Base(os.Args[0])
}
// safe to call NewMDNSService(instance, ...) Type guard
func hasInstanceName(s string) bool { return strings.TrimSpace(s) != "" } Try / catch
svc, err := NewMDNSService(instance, service, domain, hostName, port, ips, txt)
if err != nil {
if strings.Contains(err.Error(), "missing service instance name") {
return fmt.Errorf("service display name is required in configuration: %w", err)
}
return err
} Prevention
- Make the service display name a required config field with startup validation
- Default to a sensible name (executable name, product name) when unset
- Fail at app start, not at registration time, when the name is blank
When it happens
Trigger: Calling NewMDNSService("", service, domain, hostName, port, ips, txt) — an empty instance argument, often from an unset config field or empty derived value.
Common situations: Registering a service where the display name comes from an app config or environment variable that is unset; a generated name builder returning "" on failure.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- missing service name
- missing service port
- addr (nats subject) must not be empty
- ai model is nil
- domain is not a fully-qualified domain name
AI-assisted analysis of micro/go-micro@24529f1404 (2026-09-01).
Data as JSON: /api/errors/82abde45849c45f0.
Report an issue: GitHub.
Appendix: source
Thrown at internal/util/mdns/zone.go:67
// TODO(reddaly): Perform full validation.
return nil
}
// NewMDNSService returns a new instance of MDNSService.
//
// If domain, hostName, or ips is set to the zero value, then a default value
// will be inferred from the operating system.
//
// TODO(reddaly): This interface may need to change to account for "unique
// record" conflict rules of the mDNS protocol. Upon startup, the server should
// check to ensure that the instance name does not conflict with other instance
// names, and, if required, select a new name. There may also be conflicting
// hostName A/AAAA records.
func NewMDNSService(instance, service, domain, hostName string, port int, ips []net.IP, txt []string) (*MDNSService, error) {
// Sanity check inputs
if instance == "" {
return nil, fmt.Errorf("missing service instance name")
}
if service == "" {
return nil, fmt.Errorf("missing service name")
}
if port == 0 {
return nil, fmt.Errorf("missing service port")
}
// Set default domain
if domain == "" {
domain = "local."
}
if err := validateFQDN(domain); err != nil {
return nil, fmt.Errorf("domain %q is not a fully-qualified domain name: %v", domain, err)
}
// Get host information if no host is specified.
if hostName == "" {View on GitHub (pinned to 24529f1404)