I use this function to limit response time from DNS server

func LookupHost(hostname string, timeout time.Duration) ([]string, error) {
    c1 := make(chan []string)
    c2 := make(chan error)

    go func() {
        var ipaddr []string
        ipaddr, err := net.LookupHost(hostname)
        if err != nil {
            c2 <- err
            close(c2)
        }

        c1 <- ipaddr
        close(c1)
    }()

    select {
    case ipaddr := <-c1:
        return ipaddr, nil
    case err := <-c2:
        return []string{}, err
    case <-time.After(timeout):
        return []string{}, errors.New("timeout")
    }

}
net.LookupHost(hostname)

Any way to avoid this?
May be some other way how to query DNS servers with timeouts?