从结构转换/隐藏值

时间:2018-10-23 19:38:14

标签: go

我有一个应用程序,可以在数据库中创建用户并返回其信息(带有struct)。而且我想将用户模型发送给客户端(Web服务器的响应),而无需输入密码(或者我不希望客户端获得的更多信息)。 正确的方法是什么?使“ UIUser”结构与我要发送客户端的唯一字段并将原始模型转换为此结构?或用户界面?

当然,如果可以举个例子解决这个问题。

2 个答案:

答案 0 :(得分:5)

通常,拥有视图结构可能是一个好主意,因为您不想将API格式与内部表示形式耦合。无论如何,如果您只是想以一种懒惰的方式这样做并且避免序列化密码,则可以始终使用- json struct标签:

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))
}

Playground

答案 1 :(得分:2)

我已经看到了一些按照您的描述进行操作的示例。具有所需数据和两个结构之间的转换函数的不同结构。根据您的应用程序,也可以将字段设置为私有或公共。例如,golang的Json或Yaml解析器仅填充结构的公共字段。

如果您是来自OOP的背景知识,则可以随时将Getter-Setter方法写入结构。

最简单的方法似乎就是您在问题中所写的方法。