learning_go/go-code-samples/awesomeProject/error-handling/network.go
2025-12-20 10:21:45 +03:00

37 lines
775 B
Go

package main
import (
"errors"
"fmt"
"log"
"net"
)
// Connect to a TCP server and check the error. use errors.As() to unwrap the net.OpError, and test if the error is transient.
func connectToTCPServer() error {
var err error
var conn net.Conn
for retry := 3; retry > 0; retry-- {
conn, err = net.Dial("tcp", "127.0.0.1:12345")
if err != nil {
// Check if err is a net.OpError
opErr := &net.OpError{}
if errors.As(err, &opErr) {
log.Println("err is net.OpError:", opErr.Error())
// test if the error is temporary
if opErr.Temporary() {
log.Printf("Retrying...\n")
continue
}
retry = 0
}
}
}
if err != nil {
return fmt.Errorf("connect failed: %w", err)
}
defer conn.Close()
// send or receive data
return nil
}