2017-02-16 10 views
-1

Поэтому у меня есть функция getToken()Golang: возвращение указатели и derefrencing

func getToken() jwt.MapClaims { 
    tokenString := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkYW0iLCJwYXNzd29yZCI6InRlc3QiLCJpYXQiOjE0ODcyMDY2OTIsImV4cCI6MTUxODc2NDI5Mn0.6LQo_gRwXiFBvNIJOwtf9UuxoQMZZ3XNILTnU-46-Zg" 
    token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { 

     if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { 
      return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) 
     } 

     hmacSampleSecret := []byte("supersecretkittysecret") 
     return hmacSampleSecret, nil 
    }) 

    if err != nil { 
     println("error") 
    } 

    if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid { 
     return claims 
    } else { 
     return nil 
    } 

} 

Тогда соответствующий вызов:

res := getToken() 

println(res["username"]) 

Почему res["username"] равна двум адресов памяти (0x2b3c20,0xc420075420)? Это должна быть строка типа adam. Я также пробовал func getToken() *jwt.MapClaims и return &claims, но это все равно не помогло.

+0

вы пытались использовать '* Рез [" имя пользователя] ' –

+0

@GujaratSantana возвращает ошибку? 'invalid косвенное значение res [" username "] (type interface {})' – adamSiwiec

+0

Вы пытались 'fmt.Println (res [" username "])' вместо 'println'? –

ответ

2

Вы должны попробовать использовать fmt.Println вместо println. Вот пример печати карты с использованием println против fmt.Println

package main 

import (
    "fmt" 
) 

func foo() map[string]string { 
    return map[string]string{ 
     "k": "value", 
    } 
} 

func main() { 
    res := foo() 
    println("Output from println:", res)   // prints pointer address 
    fmt.Println("Output from fmt.Println: ", res) // prints the map 
} 

https://play.golang.org/p/gCNqng3KEE

Выход:

Output from println: 0x10432200 
Output from fmt.Println: map[k:value] 
+0

Отлично, это работает. истинное обучение искусство: Но почему это работает? – adamSiwiec

 Смежные вопросы

  • Нет связанных вопросов^_^