json.Marshal(v)?Преобразует значение в JSON и возвращает ([]byte, error). В JSON попадают только экспортированные поля структур. Приватные поля игнорируются.
type T struct {
A int `json:"a"`
B string `json:"b,omitempty"`
}
data, err := json.Marshal(T{A: 1})
// {"a":1} - B опущен из-за omitempty
Теги задают имена ключей и опции (omitempty, - для пропуска).