You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GET方法查询时Go+MongoDB如何拼接两个字段生成指定返回值

Go 结构体序列化JSON自动生成拼接name字段的实现方案

有两种常用的实现方式,你可以根据自己的业务场景选择:

方式1:自定义json.Marshaler接口实现(全局生效)

这种方式修改原结构体的序列化逻辑,所有对Employee类型执行JSON序列化的场景都会自动带上name字段,不需要额外的转换操作。

代码示例

import (
    "encoding/json"
    "fmt"
)

type Employee struct {
    LastName   string    `bson:"lastName" json:"lastName"`
    FirstName  string    `bson:"firstName" json:"firstName"`
}

// 实现json.Marshaler接口
func (e Employee) MarshalJSON() ([]byte, error) {
    // 定义别名避免序列化时递归调用MarshalJSON造成死循环
    type EmpAlias Employee
    return json.Marshal(&struct {
        EmpAlias
        Name string `json:"name"`
    }{
        EmpAlias: EmpAlias(e),
        Name: fmt.Sprintf("%s %s", e.LastName, e.FirstName),
    })
}

你直接把查询到的Employee实例返回给接口序列化框架即可,最终输出的JSON就会自动包含拼接好的name字段。

方式2:单独定义返回DTO(仅指定接口生效)

如果你不希望修改原结构体的全局序列化逻辑,仅在这个GET接口返回时才需要name字段,可以单独定义接口返回用的DTO结构体,查询到数据后做一次转换即可。

代码示例

// 原数据库模型不变
type Employee struct {
    LastName   string    `bson:"lastName"`
    FirstName  string    `bson:"firstName"`
}

// 接口返回专用DTO
type EmployeeDTO struct {
    LastName  string `json:"lastName"`
    FirstName string `json:"firstName"`
    Name      string `json:"name"`
}

// 模型转换方法
func ToEmployeeDTO(emp Employee) EmployeeDTO {
    return EmployeeDTO{
        LastName: emp.LastName,
        FirstName: emp.FirstName,
        Name: fmt.Sprintf("%s %s", emp.LastName, emp.FirstName),
    }
}

// 接口逻辑示例(以Gin框架为例)
func GetEmployees(c *gin.Context) {
    // 从数据库查询到所有员工数据
    var emps []Employee
    if err := mongo.Collection("employee").Find(nil, bson.M{}).All(&emps); err != nil {
        // 错误处理逻辑
        c.JSON(500, gin.H{"msg": "查询失败"})
        return
    }
    // 批量转换为DTO
    resp := make([]EmployeeDTO, 0, len(emps))
    for _, emp := range emps {
        resp = append(resp, ToEmployeeDTO(emp))
    }
    // 返回结果
    c.JSON(200, resp)
}

内容的提问来源于stack exchange,提问作者Clement Olaniyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:24:04