У меня есть приложение, которое создает пользователя в базе данных и возвращает его информацию (со структурой). и я хочу отправить модель пользователя клиенту (ответ веб-сервера) без пароля (или дополнительной информации, которую я не хочу, чтобы клиент получил). как правильно это сделать? создать структуру "UIUser" с единственными полями, которые я хочу отправить клиенту, и преобразовать исходную модель в эту структуру? или пользовательский интерфейс?
И, конечно, если вы можете привести мне пример решения этой проблемы.
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))
}
Я видел несколько примеров того, что вы описали. Другая структура с желаемыми данными и функцией преобразования между обеими структурами. В зависимости от вашего приложения также можно сделать поля частными или общедоступными. Например, парсер Json или Yaml для golang заполняет только публичные поля структуры.
Если у вас больше опыта в ООП, вы всегда можете написать методы Getter-Setter в свою структуру.
Самый простой способ - это тот, который вы написали в своем вопросе.
Похожие вопросы
Новые вопросы
go
Go - это язык программирования с открытым исходным кодом. Он статически типизирован, с синтаксисом, свободно полученным из C, с добавлением автоматического управления памятью, безопасностью типов, некоторыми возможностями динамической типизации, дополнительными встроенными типами, такими как массивы переменной длины (называемые слайсами) и сопоставления ключ-значение, и большая стандартная библиотека.