我有一个问题,我的应用程序不会在循环通道后到达下一个语句。为了澄清我的意思,请查看以下代码片段。
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"
}
你好将要打印出来,而且我得到了返回值。
我在第一个代码片段中做错了什么?
绝地无双
相关分类