面试题答案
一键面试- 接收操作的行为:
- 当一个通道被关闭后,对该通道进行接收操作时,如果通道中还有数据,会正常接收数据。当通道中没有数据时,接收操作不会阻塞,而是立即返回,返回的是通道元素类型的零值,并且第二个返回值(一个布尔值)为
false
,用于标识通道是否已关闭。
- 当一个通道被关闭后,对该通道进行接收操作时,如果通道中还有数据,会正常接收数据。当通道中没有数据时,接收操作不会阻塞,而是立即返回,返回的是通道元素类型的零值,并且第二个返回值(一个布尔值)为
- 代码示例:
package main
import (
"fmt"
)
func main() {
ch := make(chan int)
go func() {
ch <- 10
close(ch)
}()
// 第一次接收,通道中有数据
data1, ok1 := <-ch
fmt.Printf("第一次接收:data1 = %d, ok1 = %v\n", data1, ok1)
// 第二次接收,通道中无数据且已关闭
data2, ok2 := <-ch
fmt.Printf("第二次接收:data2 = %d, ok2 = %v\n", data2, ok2)
}
上述代码中,首先向通道ch
发送一个值10
并关闭通道。然后进行两次接收操作,第一次接收能获取到发送的值10
以及ok1
为true
,第二次接收获取到的是int
类型的零值0
以及ok2
为false
,表明通道已关闭且无数据。