golang 陈有超时的去

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 陈有超时的去相关的知识,希望对你有一定的参考价值。

// Go 的_通道选择器_ 让你可以同时等待多个通道操作。
// Go 协程和通道以及选择器的结合是 Go 的一个强大特性。

package main

import "time"
import "fmt"

func main() {

	c1 := make(chan string, 1)

	go func() {
		time.Sleep(time.Second * 2)
		c1 <- "result 1"
	}()

	select {

	case res := <-c1:
		fmt.Println(res)

	case <-time.After(time.Second * 1):
		fmt.Println("timeout 1")

	}

	c2 := make(chan string, 1)
	go func() {
		time.Sleep(time.Second * 2)
		c2 <- "result 2"
	}()

	select {

	case res := <-c2:
		fmt.Println(res)

	case <-time.After(time.Second * 3):
		fmt.Println("timeout 2")
	}
}

golang 关于处理TCP连接和设置超时的Golang示例。

package main

import (
	"fmt"
	"net"
	"time"
	"bufio"
)

func handleConnection(conn net.Conn) {
	fmt.Println("Handling new connection...")

	// Close connection when this function ends
	defer func() {
		fmt.Println("Closing connection...")
		conn.Close()
	}()

	timeoutDuration := 5 * time.Second
	bufReader := bufio.NewReader(conn)

	for {
		// Set a deadline for reading. Read operation will fail if no data
		// is received after deadline.
		conn.SetReadDeadline(time.Now().Add(timeoutDuration))

		// Read tokens delimited by newline
		bytes, err := bufReader.ReadBytes('\n')
		if err != nil {
			fmt.Println(err)
			return
		}

		fmt.Printf("%s", bytes)
	}
}

func main() {
	// Start listening to port 8888 for TCP connection
	listener, err:= net.Listen("tcp", ":8888")
	if err != nil {
		fmt.Println(err)
		return
	}

	defer func() {
		listener.Close()
		fmt.Println("Listener closed")
	}()

	for {
		// Get net.TCPConn object
		conn, err := listener.Accept()
		if err != nil {
			fmt.Println(err)
			break
		}

		go handleConnection(conn)
	}
}

以上是关于golang 陈有超时的去的主要内容,如果未能解决你的问题,请参考以下文章

React 中的去抖动和超时

订单超时自动取消golang

golang channel 超时如何处理

golang网络通信超时设置

golang Golang超时和滴答循环

golang 关于处理TCP连接和设置超时的Golang示例。