【问题标题】:Convert / Hide values from struct转换/隐藏结构中的值
【发布时间】:2018-10-24 04:43:38
【问题描述】:

我有一个应用程序在数据库中创建一个用户并返回他的信息(使用结构)。我想将用户模型发送到客户端(Web 服务器的响应),没有密码(或者我不希望客户端获得的更多信息)。 这样做的正确方法是什么?用我想发送给客户端的唯一字段创建一个“UIUser”结构并将原始模型转换为这个结构?还是用户界面?

当然,如果你能给我一个例子来解决这个问题。

【问题讨论】:

    标签: go


    【解决方案1】:

    一般来说,拥有视图结构可能是一个好主意,因为您不想将 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))
    }
    

    Playground

    【讨论】:

    • @atayenel 也推荐了我,这正是我想要的,它就像魔法一样工作
    【解决方案2】:

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

    如果您有更多的 OOP 背景,您可以随时将 Getter-Setter 方法写入您的结构。

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

    【讨论】:

    • getter 的问题是我需要调用所有我想发送给客户端的 getter,我想让我的生活更轻松,只需使用我想要公开的数据制作一个 UI 结构。我会检查你的第一个建议,听起来不错
    猜你喜欢
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多