Take a look at this:
n := "tcp"
if strings.Contains(cfg.Addr, "/") {
n = "unix"
}
When cfg.Addr equals to ./server.sock, everything is ok. But what happen when cfg.Addr is server.sock? Absolutely, something goes wrong.
I notice that, when net.ResolveTCPAddr returns an error, then we can say cfg.Addr is a unix address
n := "tcp"
if _, err := net.ResolveTCPAddr("tcp", cfg.Addr); err != nil {
n = "unix"
}
Thanks!