2016-09-08 6 views
0

File1.goWie Objekt für eine Struktur in golang

Package abc 

type ECA struct { 
    *CA 
    obcKey   []byte 
    obcPriv, obcPub []byte 
    gRPCServer  *grpc.Server 
} 


type ECAP struct { 
    eca *ECA 
} 


func (ecap *ECAP) ReadCACertificate(ctx context.Context, in *pb.Empty) (*pb.Cert, error) { 
    Trace.Println("gRPC ECAP:ReadCACertificate") 

    return &pb.Cert{Cert: ecap.eca.raw}, nil 
} 

File2.go

package main 

import "abc" 

var ecap abc.ECAP //creating instance 

func main() { 
    err = ecap.ReadCACertificate(floo,floo) 
} 

Ich bin ein Neuling erstellen. Ich möchte eine Instanz der ECAP-Struktur erstellen und die ReadCACertificate-Methode aufrufen. Im Moment erstelle ich wie folgt: "var ecap abc.ECAP // creating instance", die "nil" und nil pointer error liefert.

Kann jemand helfen, die ReadCACertificate-Methode in effizienter Weise aufzurufen.

Vielen Dank im Voraus.

Antwort

0

Sie müssen die zweite Datei von Ihrem $ GOPATH importieren. Und Ihre Funktion gibt 2 Werte zurück, nicht nur einen Fehler.

package main 


import (
    "$RELATIVE_PATH_FROM_GOPATH/abc" 
) 


var ecap := ECAP{new(ECA)} //initialize your struct, since it has pointers 

func main() { 
    cert, err = ecap.ReadCACertificate(floo,floo) 
} 

Datei 1

type ECAP struct { 
    Eca *ECA //uppercase make field be exported 
} 
+1

zwei Dateien sind in 2 verschiedenen Paketen. – balakrishna

+0

@balakrishna Wie wäre es jetzt? hinzugefügt Alexey Soshin Tipp auch – CESCO

+0

Danke für die Antwort @CESCO. ecap: = abc.ECAP {neu (abc.ECA)} gibt Fehler "implizite Zuweisung von nicht exportierten Feld 'eca' in abc.ECAP-Literal" als eca ist nicht exportierten Feld in ECA-Struktur. – balakrishna

0

Ihr Beispiel ist unvollständig, aber im Grunde müssen Sie Ihre Struktur initialisieren, da es Zeiger und Standardzeigerwert ist gleich Null hat.

var ecap := ECAP{new(ECA)} 
+0

Ich importiere das Paket "abc" in ein anderes Paket "main". Wenn Sie sehen, hat die Struktur "ECAP" ein Feld "eca", das nicht exportierte Feld im Paket "abc" ist. Wenn ich versuchte, Instanz für ECAP-Struktur zu erstellen, bekomme ich Fehler ** "implizite Zuweisung von nicht exportierten Feld 'eca' in abc.ECAP-Literal" ** – balakrishna

+0

Wenn Sie bei den Paketen bleiben, dann verwenden Sie auch abc.ECA –

+0

* * ecap: = abc.ECAP {neu (abc.ECA)} ** gibt den Fehler "implizite Zuweisung des nicht exportierten Feldes 'eca' in abc.ECAP literal", da eca ein nicht exportiertes Feld in der ECA-Struktur ist. – balakrishna

Verwandte Themen