如何检查从TCP套接字读取是否会阻塞?

If I have a tcp connection conn, how can determine whether conn.Read will block?

My understanding is that Go's Read uses non-blocking sockets and will only block if there's no data available to read (See https://stackoverflow.com/a/36117724/4447365).

But is there any way to check if the socket has no data available?

This can be done with the POSIX read function by calling it with a count argument of zero.

When programming in Go don't worry about it. Assume everything will block. Then put it in a goroutine so it runs asynchronously anyway.

The Go runtime handles all of the details.

Also, the issue here seems to be what you want to do. The issue was rejected: Go doesn't do that. Neither does C. And even if it did it isn't reliable. If you read down to the end there are suggested solutions involving the Linger TCP setting.