Немаршальная ошибка с голангом на AWS Lambda, работает локально - PullRequest
0 голосов
/ 24 марта 2019

Я создал код в golang, который должен поддерживать API конечных точек (через запросы get). Это документация по конечной точке API: https://developer.dotdigital.com/docs/get-all-campaigns

Код выглядит так:

type Campaign struct {
    Id          int    `json:"id,omitempty"`
    Name        string `json:"name,omitempty"`
    Subject     string `json:"subject,omitempty"`
    FromName    string `json:"fromName,omitempty"`
    FromAddress struct {
        Id    int    `json:"id,omitempty"`
        Email string `json:"email,omitempty"`
    }
    HtmlContent      string `json:"htmlContent,omitempty"`
    PlainTextContent string `json:"plainTextContent,omitempty"`
    ReplyAction      string `json:"replyAction,omitempty"`
    IsSplitTest      bool   `json:"isSplitTest,omitempty"`
    Status           string `json:"status,omitempty"`
}

func (dcfg DotmailerApiConfig) GetContacts2() ([]*dotmailermodels.Contact) {
    var (
        allContacts, respContacts []*dotmailermodels.Contact
        selected                  = 1000
        skip                      = 0
        err error
    )
    for true {
        url := dcfg.Url + fmt.Sprintf("v2/contacts?withFullData=%s&select=%s&skip=%s",
            strconv.FormatBool(false),
            strconv.Itoa(selected),
            strconv.Itoa(skip))
        resp := dcfg.GetRequesDotmailertBuilder(url)
        err = json.Unmarshal(resp, &respContacts)
        if err != nil {
            Error.Println(err) // just error trace
        }
        allContacts = append(allContacts, respContacts...)
        if len(respContacts) == 1000 {
            skip += 1000
            respContacts = nil
            continue
        }
        break
    }
    return allContacts
}


Когда я бегу на своем ПК, я получаю правильный ответ. Когда я использую его в Lambda, я получаю эту ошибку:

[ERROR] 2019/03/24 18:37:26 dotmailergetrequests.go:110: json: cannot unmarshal object into Go value of type []*dotmailermodels.Campaign

У вас есть идеи, почему?

Ответы [ 2 ]

1 голос
/ 25 марта 2019

попробуйте это:

type Address struct {
    Id    int    `json:"id,omitempty"`
    Email string `json:"email,omitempty"`
}
type Campaign struct {
    Id          int    `json:"id,omitempty"`
    Name        string `json:"name,omitempty"`
    Subject     string `json:"subject,omitempty"`
    FromName    string `json:"fromName,omitempty"`
    FromAddress *Address `json:"fromAddress,omitempty"`
    HtmlContent      string `json:"htmlContent,omitempty"`
    PlainTextContent string `json:"plainTextContent,omitempty"`
    ReplyAction      string `json:"replyAction,omitempty"`
    IsSplitTest      bool   `json:"isSplitTest,omitempty"`
    Status           string `json:"status,omitempty"`
}
0 голосов
/ 25 марта 2019

Я нашел эту ошибку.Все было правильно - кроме импорта пароля в другом файле.

...