发布时间:2024-12-23 01:59:15
Golang提供了一个Timeout类型的结构体,可以用来设定具体的读写超时时间。通过设置这个超时时间,我们可以避免长时间的等待。下面是一个简单的例子:
package main
import (
"fmt"
"net"
"time"
)
func main() {
conn, err := net.DialTimeout("tcp", "example.com:80", 2*time.Second)
if err != nil {
fmt.Println("Connection failed:", err)
return
}
defer conn.Close()
}
在上面的例子中,我们使用net包中的DialTimeout函数来建立一个TCP连接,并设置了超时时间为2秒。如果在2秒内无法建立连接,程序会返回错误信息。通过这种方式,我们可以及时处理连接失败的情况,而不是无限等待。
一旦建立了连接,我们还需要处理读写操作的超时情况。Golang提供了Deadline类型的结构体,用来设定具体的超时时间。下面是一个简单的例子:
package main
import (
"fmt"
"net"
"time"
)
func main() {
conn, err := net.Dial("tcp", "example.com:80")
if err != nil {
fmt.Println("Connection failed:", err)
return
}
defer conn.Close()
deadline := time.Now().Add(5 * time.Second)
err = conn.SetDeadline(deadline)
if err != nil {
fmt.Println("Set deadline failed:", err)
return
}
_, err = conn.Write([]byte("Hello, World!"))
if err != nil {
fmt.Println("Write failed:", err)
}
buffer := make([]byte, 1024)
n, err := conn.Read(buffer)
if err != nil {
fmt.Println("Read failed:", err)