У меня есть приложение, которое создает пользователя в базе данных и возвращает его информацию (со структурой). и я хочу отправить модель пользователя клиенту (ответ веб-сервера) без пароля (или дополнительной информации, которую я не хочу, чтобы клиент получил). как правильно это сделать? создать структуру "UIUser" с единственными полями, которые я хочу отправить клиенту, и преобразовать исходную модель в эту структуру? или пользовательский интерфейс?

И, конечно, если вы можете привести мне пример решения этой проблемы.

go
0
Nir Berko 23 Окт 2018 в 22:38

2 ответа

Лучший ответ

Наличие структур представления, вероятно, в целом является хорошей идеей, поскольку вы не хотите связывать формат API с внутренним представлением. В любом случае, если вы просто хотите сделать это ленивым способом и избежать сериализации пароля, вы всегда можете использовать тег структуры json -:

package main

import (
    "fmt"
    "encoding/json"
    "log"
)

type user struct {
    ID      int     `json:"id"`
    Name    string  `json:"name"`
    Pass    string  `json:"-"`
}

func main() {
    u := &user{123, "John", "supersecret"}
    b, err := json.Marshal(u)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(string(b))
}

Детская площадка

5
Radu Ciurlea 23 Окт 2018 в 20:43

Я видел несколько примеров того, что вы описали. Другая структура с желаемыми данными и функцией преобразования между обеими структурами. В зависимости от вашего приложения также можно сделать поля частными или общедоступными. Например, парсер Json или Yaml для golang заполняет только публичные поля структуры.

Если у вас больше опыта в ООП, вы всегда можете написать методы Getter-Setter в свою структуру.

Самый простой способ - это тот, который вы написали в своем вопросе.

2
atakanyenel 23 Окт 2018 в 19:43
52956655