// +build linux package main import ( "fmt" "os" "syscall" ) // scutil --get ComputerName // getDomainName fetches the domain name using the getdomainname syscall. func getDomainName() (string, error) { var buf [256]byte err := syscall.Getdomainname(buf[:]) if err != nil { return "", fmt.Errorf("failed to get domain name: %w", err) } // Trim null bytes n := 0 for ; n < len(buf); n++ { if buf[n] == 0 { break } } return string(buf[:n]), nil } // GetFullHostname returns the hostname + domain name (if set). func GetFullHostname() (string, error) { host, err := os.Hostname() if err != nil { return "", fmt.Errorf("failed to get hostname: %w", err) } domain, err := getDomainName() if err != nil || domain == "" { return host, nil // fallback to short hostname } return fmt.Sprintf("%s.%s", host, domain), nil } func main() { fqdn, err := GetFullHostname() if err != nil { fmt.Println("Error:", err) return } fmt.Println("Hostname + Domain:", fqdn) }