2017-08-16 4 views
-2

J'écris une application dans Go qui utilise un type d'objet Logger.
Dans ce document, j'utiliser une autre application qui utilise le même type d'objet enregistreur:
App1:Type incohérent dans golang, ne peut pas utiliser <Type> as <Type>

import "gitlab.sio.com/go/zlog" 

var logger = zlog.New(append(opts, 
    zlog.App(c.Name, typ, version), 
    zlog.Env(c.Environment), 
)...) 
.... 
router.GET("/get", GetHandler(logger)) 
.... 
func GetHandler(logger *zlog.Logger){ 
    .... 
    mdl, _ := security.New(*logger) 
    .... 
} 

App2 (security.New de lib de sécurité):

package security 

import "gitlab.sio.com/go/zlog" 

Middleware struct { 
    log    zlog.Logger 
} 

func New(log zlog.Logger){ 
... 
mdw := Middleware{} 
mdw.log = log 
} 

L'erreur que je suis obtenir à la ligne

mdl, _: = security.New (* enregistreur)

est:

ne peut pas utiliser * enregistreur (type "gitlab.sio.com/go/furtif/vendor/gitlab.sio.com/go/zlog".Logger) en tant que type" gitlab.sio. com/go/sécurité/fournisseur/gitlab.sio.com/go/zlog » .Logger en argument security.New

+5

Lire attentivement le message: Ce sont les différents types. L'un provient du paquet '.../furtif/vendor ...', l'autre de '.../security/vendor/...'. Fixez votre distribution. – Volker

Répondre

0

Vous devez corriger vos déclarations d'importation au point correctement les types d'importation d'où ils devraient appartenir à. Lisez le message d'erreur.

+3

Ce ne sont pas les instructions d'importation en cause. C'est qu'il y a deux copies vendues séparément de la même bibliothèque dans le GOPATH - semble avoir importé une bibliothèque qui utilise la distribution, qui est, comme toujours, une mauvaise chose ™. – Adrian

-3

Vous devez envoyer le paramètre Logger par valeur! Vous envoyez un pointeur de Logger (par référence) Si vous supprimez * à l'arrière de logger cela devrait fonctionner!

mdl, _ := security.New(*logger) 

->

mdl, _ := security.New(logger) 
+0

Ce n'est pas le problème. – Gavin