2012-12-04 10 views
11

Mi sembra che questo dovrebbe essere un problema minore, ma ho provato ogni schema che mi viene in mente, e non ho avuto fortuna. Ho una struttura che deve essere codificata da entrambi i pacchetti encoding/json e github.com/zeebo/bencode. Capita di includere un canale, che non può essere codificato da entrambi i pacchetti. Pertanto, deve portare il tag "-", in modo che quel campo venga saltato.Più tag sullo stesso elemento struct Go

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

Questo è valido quando codificata dal pacchetto json, ma non con il pacchetto bencode.

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

Questo blocco, ovviamente, ha il problema gratuito. Ho provato le sintassi dei tag come json:"-",bencode:"-", *:"-", "-", -. C'è una soluzione?

Grazie a tutti.

risposta

17

Gli spazi sembrano essere il delimitatore tra i tag struct quando vengono utilizzati per la codifica dei suggerimenti.

Esempio:

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

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

Nel tuo caso, prova:

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

Quella era l'unica cosa che non ho provato! Grazie mille. –

+2

Da http://golang.org/pkg/reflect/#StructTag: Per convenzione, le stringhe di tag sono una concatenazione di chiavi opzionalmente separate da spazio: coppie "valore". Ogni chiave è una stringa non vuota composta da caratteri non di controllo diversi dallo spazio (U + 0020 ''), citazione (U + 0022 '"') e due punti (U + 003A ':'). Ogni valore è quotato usando U + 0022 caratteri "" "e sintassi Go letterale stringa. –

+0

In altre parole, lo spazio è facoltativo, ma nessun altro separatore funziona. –

Problemi correlati