我有一个问题,我的应用程序在循环通道后不会到达下一个语句.为了澄清,我的意思是,请看下面的代码片段.
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"
}
Run Code Online (Sandbox Code Playgroud)
那是我的创建帐户功能.在三个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"
}
Run Code Online (Sandbox Code Playgroud)
你好打印出来,加上我得到了返回值.
我在第一段代码中出了什么问题?
该validation
通道是永远不会关闭.
for err := range validation {
errColl[iterator] = err
iterator++
}
Run Code Online (Sandbox Code Playgroud)
带有"range"子句的"for"语句遍历数组,切片,字符串或映射的所有条目,或者在通道上接收的值.
对于通道,产生的迭代值是在通道上发送的连续值,直到通道关闭.
归档时间: |
|
查看次数: |
326 次 |
最近记录: |