Struktura odpowiedzi o błędzie interfejsu Gmail API zawiera pole kodu zgodnie z Egzaminator
_, err := gmailService.Users.Messages.Send("me", &gMsg).Do()
t := reflect.TypeOf(err)
examiner(t,0)
Odpowiedź
Type is and kind is ptr
Contained type:
Type is Error and kind is struct
Field 1 name is Code type is int and kind is int
...
Mogę z powodzeniem uzyskać kod błędu za pomocą indeksu pola, ale jest to bardziej niejasne (i dlatego trudniejsze do utrzymania) i wydaje się bardziej kruche:
errReflectElem := reflect.ValueOf(err).Elem()
fmt.Printf("err.Code %v\n",errReflectElem.Field(0).Interface())
Wygląda na to, że powinienem również uzyskać kod błędu w następujący sposób na podstawie tego przykładu:
fmt.Println("Code: %v",err.Code)
Jednak to daje błąd kompilacji:
err.Code undefined (type error has no field or method Code)
Czego mi brakuje?
1 odpowiedź
Zgodnie z dokumentacją zwraca *googleapi.Error
. Po prostu potwierdź tego typu i masz pełny dostęp do wszystkiego, co zawiera. Jest to doskonały przykład potęgi interfejsów i właściwej obsługi błędów za pośrednictwem eksportowanego typu. Jeśli taki typ błędu jest eksportowany, nie ma potrzeby uzyskania do niego dostępu.
if gapiErr, ok := err.(*googleapi.Error); ok {
// use gapiErr.WhateverField
}
Podobne pytania
Nowe pytania
go
Go to język programowania typu open source. Jest zapisywany statycznie, ze składnią luźno pochodzącą z języka C, dodającą automatyczne zarządzanie pamięcią, bezpieczeństwo typów, niektóre możliwości dynamicznego pisania, dodatkowe typy wbudowane, takie jak tablice o zmiennej długości (zwane odcinkami) i mapy klucz-wartość oraz duża biblioteka standardowa.