为了账号安全,请及时绑定邮箱和手机立即绑定

使用范围应用程序中断循环通道后

使用范围应用程序中断循环通道后

Go
交互式爱情 2021-08-10 10:38:14
我有一个问题,我的应用程序不会在循环通道后到达下一个语句。为了澄清我的意思,请查看以下代码片段。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”语句遍历数组、切片、字符串或映射的所有条目,或通道上接收到的值。

对于通道,产生的迭代值是通道上发送的连续值,直到通道关闭。


查看完整回答
反对 回复 2021-08-10
  • 2 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信