2013-09-24 4 views
1

Я получаю массив всех пользователей с атрибутом ID в своем документе:Golang Выбор полей из массива STRUCT

Users := []backend.User{} 

err := Collection.Find(bson.M{"channel_id": bson.ObjectIdHex(chId)}).All(&Users) 
if err != nil { 
    println(err) 
} 

Что я хочу послать в ответ JSON обратно в браузер/клиент. Тем не менее, структура пользователя содержит такие вещи, как идентификаторы и пароли Hahsed, которые я не хочу отправлять обратно!

Я искал что-то вроде использования пакета отражения, чтобы выбрать поля структуры, а затем помещать их в интерфейс [string] [}, но я не уверен, как это сделать с помощью массива пользователей.

ответ

1

Вы можете игнорировать поля структуры, а json.Marshal.

package main 

import (
    "encoding/json" 
    "fmt" 
) 

type User struct { 
    Id int `json:"-"` 
    Name string `json:"name"` 
} 

type Users []*User 

func main() { 

    user := &Users{ 
     &User{1, "Max"}, 
     &User{2, "Alice"}, 
     &User{3, "Dan"}, 
    } 

    json, _ := json.Marshal(user) 

    fmt.Println(string(json)) 
} 

Runnable пример Play Golang: http://play.golang.org/p/AEC_TyXE3B

Существует очень полезная часть о using the tags в док. То же самое для XML, но это более сложно по понятным причинам.

Смежные вопросы