我有一个问题,我的应用程序不会在循环通道后到达下一个语句。为了澄清我的意思,请查看以下代码片段。func CreateAccount(name, email, password string) (string, string) { validation := make(chan error) errColl := make([]error, 3, 3) iterator := 0 go func() { nameErr := IsNameValid(name) validation <- nameErr }() go func() { emailErr := IsEmailValid(email) validation <- emailErr }() go func() { passwordErr := IsPasswordValid(password) validation <- passwordErr }() for err := range validation { errColl[iterator] = err iterator++ } fmt.Println("Hello") return "hello", "dude"}那是我的创建帐户功能。在三个 goroutine 之后,我对通道验证进行了循环。循环完成后,语句fmt.Println("你好)永远不会执行。但是当我像这样改变功能时。func CreateAccount(name, email, password string) (string, string) { validation := make(chan error) errColl := make([]error, 3, 3) //iterator := 0 go func() { nameErr := IsNameValid(name) validation <- nameErr }() go func() { emailErr := IsEmailValid(email) validation <- emailErr }() go func() { passwordErr := IsPasswordValid(password) validation <- passwordErr }() errColl[0] = <-validation errColl[1] = <-validation errColl[2] = <-validation close(validation) fmt.Println("Hello") return "hello", "dude"}你好将要打印出来,而且我得到了返回值。我在第一个代码片段中做错了什么?
2 回答
绝地无双
TA贡献1946条经验 获得超4个赞
该validation通道是永远不会关闭。
for err := range validation {
errColl[iterator] = err
iterator++
}
带有“range”子句的“for”语句遍历数组、切片、字符串或映射的所有条目,或通道上接收到的值。
对于通道,产生的迭代值是通道上发送的连续值,直到通道关闭。
- 2 回答
- 0 关注
- 197 浏览
添加回答
举报
0/150
提交
取消