2016-04-04 18 views
-1

Ich bin ziemlich neu in Go und habe Probleme mit einem Code-Snippet, das Mux-Gorilla-Sitzungen/Cookies verwendet. Es gibt eine Menge von Redundanz, die ich mit der folgenden Funktion reduzieren möchten:Undefined Rückgabetyp in Go

func isLoggedIn(w http.ResponseWriter, r *http.Request) (bool, *Session) { 
    session, err := store.Get(r, "user") 
    var logged bool = true 
    if err != nil { // Need to delete the cookie. 
     expired := &http.Cookie{Path: "/", Name: "user", MaxAge: -1, Expires: time.Now().Add(-100 * time.Hour)} 
     http.SetCookie(w, expired) 
     logged := false 
    } 
    return logged, session 
} 

Leider bekomme ich folgende Kompilierungsfehler: undefined: Session

Wie dieser Typ nicht definiert werden kann, wenn es durch die zurückgegeben werden können store.Get Funktion? Beachten Sie, dass das Geschäft zuvor unter Verwendung des "Gorilla/Sitzungen" -Pakets als store = sessions.NewCookieStore([]byte(secret)) deklariert wurde.

Antwort

2

Go muss wissen, welches Paket zu finden ist Session in: sessions.Session.

Der Fehler ist auf der Unterschrift Ihres func isLoggedIn

So würde Ihr modifizierten Code sein:

import "github.com/gorilla/sessions" 
func isLoggedIn(w http.ResponseWriter, r *http.Request) (bool, *sessions.Session) { 
    ... 
} 
+0

Wenn ich also eine Funktion haben, die einen Typ zurückgibt, die nicht importiert wird noch .. als Solange ich diesen Typ nicht speziell verwende, brauche ich das sowieso nicht? – jhc

+0

Ich bin nicht klar auf Ihre Frage; Wenn Sie den Typ explizit benennen (wie in Ihrer Funktionssignatur), müssen Sie den Import einschließen –

+0

Wenn Sie den Typ niemals explizit benennen (dh in der Funktionssignatur oder anderswo), können Sie den zurückgegebenen Wert ohne Import verwenden . –