2012-12-04 14 views
11

Mam wrażenie, że powinien to być niewielki problem, ale wypróbowałem każdy wzór, który mogę wymyślić i nie miałem szczęścia. Mam strukturę, która musi być kodowalna zarówno przez pakiety encoding/json i github.com/zeebo/bencode. Zdarza się, że zawiera kanał, który nie może być zakodowany przez żadną z paczek. Dlatego musi mieć przy sobie znacznik "-", aby to pole zostało pominięte.Wiele znaczników na tym samym elemencie struktury Go

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

Jest to ważne, gdy kodowane przez pakiet json, ale nie z pakietu bencode.

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

Blok ten, oczywiście, ma codzienne problemy. Próbowałem składni tagów, takich jak json:"-",bencode:"-", *:"-", "-", -. Czy istnieje rozwiązanie?

Dziękuję wszystkim.

Odpowiedz

17

Spacje wydają się być ogranicznikiem między znacznikami struct, gdy są używane do kodowania wskazówek.

Przykład:

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

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

w Twoim przypadku, spróbuj:

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

To była jedna rzecz ja nie spróbować! Dziękuję Ci bardzo. –

+2

Z http://golang.org/pkg/reflect/#StructTag: Zgodnie z konwencją ciągi znaków są połączeniem opcjonalnie oddzielonego od spacji klucza: pary "wartości". Każdy klucz jest niepustym łańcuchem składającym się ze znaków niekontrolowanych innych niż spacja (U + 0020 ''), cudzysłowy (U + 0022 '"') i dwukropka (U + 003A ':'). za pomocą znaków U + 0022 "" i literał łańcuchowy Go string. –

+0

Innymi słowy, spacja jest opcjonalna, ale nie działa żaden inny separator. –

Powiązane problemy