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

Golang中如何将自定义结构体的部分内容拷贝到另一个结构体

优雅提取ERC20转账数据的Go实现

结构体定义(参考你的业务场景)

// GetERC20TransferResponse 接口返回的顶层结构体
type GetERC20TransferResponse struct {
    TransferType string `json:"transferType"` // 示例类型:"incoming"/"outgoing"/"all"
    Data struct {
        Items struct {
            Transfers []Transfer `json:"transfers"` // 目标数据切片
            // 其他业务字段...
        } `json:"items"`
        // 其他数据字段...
    } `json:"data"`
    // 其他顶层字段...
}

// Transfer 提取后的转账数据结构体
type Transfer struct {
    From  string `json:"from"`
    To    string `json:"to"`
    Value string `json:"value"`
    // 其他转账相关字段...
}

核心实现函数

通过一个函数同时完成类型判断和数据提取,避免重复访问嵌套结构体:

// ExtractTransfers 一次性返回转账类型和对应的Transfers切片
func ExtractTransfers(resp *GetERC20TransferResponse) (string, []Transfer) {
    if resp == nil {
        return "", nil
    }
    // 仅读取一次嵌套字段,减少内存访问开销
    transfers := resp.Data.Items.Transfers
    return resp.TransferType, transfers
}

使用示例

func main() {
    // 假设已从接口获取到resp实例
    resp := &GetERC20TransferResponse{
        TransferType: "incoming",
        Data: struct {
            Items struct {
                Transfers []Transfer
            }
        }{
            Items: struct{ Transfers []Transfer }{
                Transfers: []Transfer{
                    {From: "0xaaa...", To: "0xbbb...", Value: "1000000000000000000"},
                    // 更多转账数据...
                },
            },
        },
    }

    transferType, transfers := ExtractTransfers(resp)

    // 根据类型执行对应业务操作
    switch transferType {
    case "incoming":
        saveIncomingTransfers(transfers)
    case "outgoing":
        saveOutgoingTransfers(transfers)
    case "all":
        saveAllTransfers(transfers)
    default:
        log.Printf("未知转账类型: %s", transferType)
    }
}

// 示例存储函数(按需实现业务逻辑)
func saveIncomingTransfers(transfers []Transfer) {
    // 业务逻辑代码...
}

方案优势

  • 性能优化:仅一次读取嵌套的Transfers字段,避免重复遍历深层结构体
  • 代码简洁:调用方无需重复操作,通过一个函数获取所有必要信息
  • 职责清晰:函数专注于类型判断和数据提取,业务逻辑与数据解耦分离

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:20:31