Go中的goroutine并发如何完成forloop给切片赋值?

type Student struct {
   Id   string `json:"id"`
   Name string `json:"name"`
}

studentList := make([]Student,len(stu))
for i, st := range stu {
   go func(st string){
      studentList[i], err = getList(st)
      if err != nil {
         return ... //just example
      }
   }{st}
}
//and a function like this
func getList(stu string)(res Student, error){
   var student Student
   err := json.Unmarshal(([]byte)(stu), &student)
   if err != nil {
      return
   }
   return &student,nil
}

假设我有stu = [{"id":"001","name":"A"} {"id":"002", "name":"B"}] ,可能更多/ 我想用json.unmarshal解析,但是for循环去调用效率太低,又不想用第三方包。所以想试试并发,GO小白,写的这个返回为空,大佬们帮忙看看

1,for循环效率并不低哈,遍历1个切片和遍历20个切片没啥区别
2,可能是没执行,看看main代码中是不是没阻塞,这个循环里面每个都会开goroutine,主线程退出太快,导致这些routine还没执行就退出了
有什么问题随时提问,如果有帮助欢迎采纳哦