Горутин может начинаться с паранормального режима. Как только горутин B начинается с goroutineA, они имеют одинаковый вес.
Есть кое-что, что вы должны учитывать, если вы хотите сделать это следующим образом.
Нужно ли запускать мою новую программу?
Я приведу пример того, что запрос должен быть сохранен как в базе данных, так и на удаленном сервере журналов.Два шага сохранения параллельны и без помех.Тогда это хорошо, чтобы начать 2 Goroutine.Один для сохранения в базе данных, другой для сохранения на сервере регистрации. Теперь вы посмотрите на свой запрос.GetAnyDataById(Id)
, очевидно, ваш новый стандартный запрос зависит от вашей прежней формы результата запроса QueryWhichWillReturnId()
, они не мешают?они логическая параллель?Ни один, так что это плохое место для использования goroutine.
Наконец, вы wg.Add(1)
, но вы дважды wg.Done()
, это будет паниковать.
Можем ли мы реализовать goroutine внутри goroutine?да.вы можете использовать go func(){}()
везде, где вы хотите начать новую программу.
func main(){
wg := &sync.WaitGroup{}
wg.Add(1)
go func(){
defer wg.Done()
Id,err := QueryWhichWillReturnId()
if err != nil{
fmt.Println(err.Error())
return
}
data:= GetAnyDataById(Id)
fmt.Println(data)
}()
wg.Wait()
}