2016-10-26 4 views
0

Ich habe eine Funktion in Go, deren Rückgabewert ich mit Hilfe von Gob kodieren möchte. Der Rückgabewert ist ein Strukturzeiger. Obwohl ich weiß, was exportierte Variablen sind, bin ich mir nicht sicher, wie ich es zum Laufen bringen soll.Exportierte und nicht exportierte Felder in Go-Sprache

Hier ist, was meine Funktion wie

ist
fun loadXYZ(root *structABC) *structABC{ 
    const once = "stateData.bin" 
    rd, errr := ioutil.ReadFile(once) 
    if errr!=nil{ 

     //Do some computation and store in "root" 

     buf := &bytes.Buffer{} 
     errr = gob.NewEncoder(buf).Encode(root) 
     if errr != nil { 
      panic(errr) 
     } 
     errr = ioutil.WriteFile(once, buf.Bytes(), 0666) 
     if errr != nil { 
      panic(errr) 
     } 
     return root 
    } 
    var d *structABC 
    errr = gob.NewDecoder(bytes.NewReader(rd)).Decode(&d) 
    if errr != nil { 
     panic(errr) 
    } 
    return d 
} 

Dies ist der Fehler ich

panic: gob: type main.stateNode has no exported fields 

Ich weiß, warum der Fehler auftritt. Aber kann mir jemand helfen, es zu lösen?

Antwort

4

In go sind Felder und Variablen, die mit einem Großbuchstaben beginnen, "exportiert" und für andere Pakete sichtbar. Felder, die mit einem Kleinbuchstaben beginnen, sind "nicht exportiert" und nur in ihrem eigenen Paket sichtbar.

Das Kodierungs-/Gob-Paket hängt von der Reflexion ab, um Werte zu kodieren, und kann nur exportierte Strukturfelder sehen.

Um Dinge codierbar zu machen, schreiben Sie den ersten Buchstaben jedes Feldnamens in Ihrer stateNode Struktur, die Sie speichern möchten.

+0

Die Klarheit der Aussage hat mir geholfen, das Problem zu verfolgen. Danke vielmals! – Parag

3

Exportierte Feld, es ist ein abgelegt, dessen Name mit aktivierten char begann wie:

type stateNode struct { 
    ImExported string // Exported 
    butImNot string // unexported 
} 
Verwandte Themen