func wait(client *speech.Client, opName string) (*speechpb.AsyncRecognizeResponse, error) { ctx := context.Background() opClient := longrunningpb.NewOperationsClient(client.Connection()) var op *longrunningpb.Operation var err error for { op, err = opClient.GetOperation(ctx, &longrunningpb.GetOperationRequest{ Name: opName, }) if err != nil { return nil, err } if op.Done { break } time.Sleep(500 * time.Millisecond) } switch { case op.GetError() != nil: return nil, fmt.Errorf("recieved error in response: %v", op.GetError()) case op.GetResponse() != nil: var resp speechpb.AsyncRecognizeResponse if err := proto.Unmarshal(op.GetResponse().Value, &resp); err != nil { return nil, err } return &resp, nil } // should never happen. return nil, errors.New("no response") }