2012-12-04 11 views
11

Ich denke, das sollte ein kleines Problem sein, aber ich habe versucht, jedes Muster, das ich mir vorstellen kann, und ich hatte kein Glück. Ich habe eine Struktur, die sowohl von den encoding/json und github.com/zeebo/bencode Pakete codiert werden muss. Es enthält zufällig einen Kanal, der von keinem der beiden Pakete codiert werden kann. Daher muss das Tag "-" mitgeführt werden, damit dieses Feld übersprungen wird.Mehrere Tags auf der gleichen Go-Struktur Mitglied

type Index struct { 
    Data data 
    Queue chan string `json:"-"` 
} 

Dies gilt, wenn die von dem json Paket codiert, aber nicht mit dem bencode Paket.

type Index struct { 
    Data data 
    Queue chan string `bencode:"-"` 
} 

Dieser Block hat natürlich das Komplementärproblem. Ich habe Tag-Syntaxen wie json:"-",bencode:"-", *:"-", "-", - versucht. Gibt es eine Lösung?

Danke euch allen.

Antwort

17

Spaces scheinen das Trennzeichen zwischen Strukturtags zu sein, wenn sie zum Codieren von Hints verwendet werden.

Beispiel:

type TaggedStructExample struct { 
    ... 
    J int `datastore:",noindex" json:"j"` 
} 

Von: https://developers.google.com/appengine/docs/go/datastore/reference#Properties

In Ihrem Fall versuchen:

type Index struct { 
    Data data 
    Queue chan string `bencode:"-" json:"-"` 
} 
+0

Das ist die eine Sache, war ich nicht versuchen! Vielen Dank. –

+2

Von http://golang.org/pkg/reflect/#StructTag: Konventionelle Tag-Zeichenfolgen sind eine Verkettung von optional durch Leerzeichen getrennten Schlüssel: "Wert" -Paare. Jeder Schlüssel ist eine nicht leere Zeichenkette, die aus anderen Zeichen besteht als Leerzeichen (U + 0020 ''), Zitat (U + 0022 '' ') und Doppelpunkt (U + 003A': '). Jeder Wert wird in Anführungszeichen gesetzt Verwenden von U + 0022 '"' Zeichen und Go-String-Literalsyntax. –

+0

Mit anderen Worten, der Platz ist optional, aber kein anderes Trennzeichen funktioniert. –

Verwandte Themen