func ReceiveMessage(pq *pqueue.PQueue, sqsQuery *urlutils.SQSQuery) sqs_response.SQSResponse { pqCfg := pq.Config() opts := &ReceiveMessageOptions{ WaitTimeSeconds: pqCfg.PopWaitTimeout, VisibilityTimeout: pqCfg.PopLockTimeout, MaxNumberOfMessages: 1, Attributes: nil, MessageAttributes: nil, } paramsLen := len(sqsQuery.ParamsList) - 1 for i := 0; i < paramsLen; i += 2 { err := opts.Parse(sqsQuery.ParamsList[i], sqsQuery.ParamsList[i+1]) if err != nil { return err } } // All messages received from SQS must be locked. res := pq.Pop(opts.VisibilityTimeout, opts.WaitTimeSeconds, opts.MaxNumberOfMessages, true) if res.IsError() { e, _ := res.(error) return sqserr.InvalidParameterValueError(e.Error()) } m, _ := res.(*resp.MessagesResponse) items := m.GetItems() output := &ReceiveMessageResponse{} for _, item := range items { if msgResp := MakeMessageResponse(item, opts, sqsQuery); msgResp != nil { output.Message = append(output.Message, msgResp) } } return output }