2012-12-04 29 views
11

Tôi cảm thấy như đây là một vấn đề nhỏ, nhưng tôi đã thử mọi mẫu mà tôi có thể nghĩ đến, và tôi không có may mắn. Tôi có một cấu trúc cần được mã hóa bởi cả các gói encoding/jsongithub.com/zeebo/bencode. Nó sẽ xảy ra để bao gồm một kênh, mà không thể được mã hóa bởi một trong hai gói. Vì vậy, nó cần phải mang theo thẻ "-", để trường đó bị bỏ qua.Nhiều thẻ trên cùng một thành viên cấu trúc Go

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

Điều này hợp lệ khi được mã hóa theo gói json nhưng không thành công với gói bencode.

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

Khối này, tất nhiên, có vấn đề miễn phí. Tôi đã thử các cú pháp thẻ như json:"-",bencode:"-", *:"-", "-", -. Có giải pháp nào không?

Cảm ơn tất cả.

Trả lời

17

Dấu cách dường như là dấu phân tách giữa các thẻ cấu trúc khi được sử dụng cho các gợi ý mã hóa.

Ví dụ:

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

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

Trong trường hợp của bạn, hãy thử:

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

Đó là một điều tôi không thử! Cảm ơn nhiều. –

+2

Từ http://golang.org/pkg/reflect/#StructTag: Theo quy ước, chuỗi thẻ là một nối của khóa được phân cách bằng dấu cách tùy chọn: cặp "giá trị". Mỗi khóa là một chuỗi không trống bao gồm các ký tự không điều khiển khác với dấu cách (U + 0020 ''), trích dẫn (U + 0022 '"') và dấu hai chấm (U + 003A ':'). sử dụng ký tự chữ U + 0022 '"' và chuỗi ký tự Go chuỗi. –

+0

Nói cách khác, không gian là tùy chọn, nhưng không có dấu phân cách nào khác hoạt động. –

Các vấn đề liên quan