为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中为导入的结构设置标签

在 Go 中为导入的结构设置标签

Go
犯罪嫌疑人X 2021-10-04 16:56:13
我使用的格姆(g ^ ō ORM)来检索从我的数据库将在JSON编码数据。Gorm 为主键和时间跟踪提供了一个默认结构,其 DeletedAt 属性不应在 JSON 中编码。我写了一个小例子,它不输出密码,但 DeletedAt 属性仍然可见。package mainimport (    "encoding/json"    "fmt"    "os"    "github.com/jinzhu/gorm"    _ "github.com/lib/pq"    _ "github.com/mattn/go-sqlite3")// Struct from the gorm package://// type Model struct {//     ID        uint `gorm:"primary_key"`//     CreatedAt time.Time//     UpdatedAt time.Time//     DeletedAt *time.Time// }// Defines the database model for gorntype User struct {    gorm.Model    Username string `json:"username" sql:"size:32; not null; unique"`    Password string `json:"password" sql:"not null"`    Locale   string `json:"locale"   sql:"not null"`}// Public JSON version of database modeltype PublicUser struct {    *User    DeletedAt bool `json:"deletedAt,omitempty"`    Password  bool `json:"password,omitempty"`}func main() {    db, err := gorm.Open("sqlite3", "storage.db")    if err != nil {        fmt.Println(err)    }    u := &User{}    db.Where("id = ?", 3).Find(&u)    json.NewEncoder(os.Stdout).Encode(PublicUser{        User: u,    })}如果我运行我的脚本,这是我得到的输出:{    "ID":3,    "CreatedAt":"2015-05-13T14:54:23.5577227Z",    "UpdatedAt":"2015-05-13T14:54:23.5577227Z",    "DeletedAt":null,    "username":"dan",    "locale":"en_US"}我修改了Alfred Rossi的例子来模仿行为,我得到了相同的结果。
查看完整描述

1 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

您可以使用设置为 false 的 bool 来遮蔽该字段并使用 omitempty


例如


type User struct {

    Username  string `json:"username"`

    DeletedAt int    `json:"deleted_at"`

}


type PublicUser struct {

    *User

    DeletedAt bool `json:"deleted_at,omitempty"`

}


查看完整回答
反对 回复 2021-10-04
  • 1 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信