【发布时间】:2018-02-27 14:19:16
【问题描述】:
在这里,我尝试迭代 res 并为每个项目启动一个 goroutine。在每个 goroutine 中,我再次在缓冲通道中启动 3 个 goroutine。
运行此代码会阻止完成并且不允许程序完成。
func (aui *AssignmentUtilImpl) MapAssignmentSubmissionData(res []AssignmentSubmissionNode) []AssignmentSubmission {
if res == nil {
return nil
}
submissions := []AssignmentSubmission{}
ch := make(chan string, len(res))
// map data
for _, val := range res {
go func(val AssignmentSubmissionNode) {
sub := AssignmentSubmission{}
c := make(chan string, 3)
go mapSubmission(&sub, val, c)
go mapUser(&sub, val, c)
go mapFiles(&sub, val, c)
sub.AssignmentId = val.AssignmentId
sub.ClassroomId = val.ClassroomId
for l := range c {
fmt.Println(l)
}
close(c)
submissions = append(submissions, sub)
ch <- "submission2: " + sub.Id
}(val)
}
for l := range ch {
fmt.Println(l)
}
close(ch)
return submissions
}
func mapFiles(sub *AssignmentSubmission, val AssignmentSubmissionNode, c chan string) {
for _, f := range val.Files {
file := resourceModule.File{}
mapstructure.Decode(f.Data, &file)
sub.Files = append(sub.Files, file)
}
c <- fmt.Sprintf("files: %d", len(sub.Files))
}
func mapUser(sub *AssignmentSubmission, val AssignmentSubmissionNode, c chan string) {
user := userModule.User{}
mapstructure.Decode(val.User.Data, &user)
sub.User = user
c <- "user: " + user.Id
}
func mapSubmission(sub *AssignmentSubmission, val AssignmentSubmissionNode, c chan string) {
mapstructure.Decode(val.Submission.Data, &sub)
c <- "submission1: " + sub.Id
}
【问题讨论】:
标签: go