golang 将sql.RawBytes转成[]map[string]interface{}{}后如何转成protobuf?

我google到了以下这段代码

cols, _ := rows.Columns()
    store := []map[string]interface{}{}

    for rows.Next() {
        columns := make([]interface{}, len(cols))
        columnPointers := make([]interface{}, len(cols))
        for i := range columns {
            columnPointers[i] = &columns[i]
        }

        if err := rows.Scan(columnPointers...); err != nil {
            return nil, err
        }

        m := make(map[string]interface{})

        for i, colName := range cols {
            val := columnPointers[i].(*interface{})
            // fmt.Printf("the value to []byte is:%+v\n", string((*val).([]byte)))
            m[colName] = *val
        }
        store = append(store, m)
    }

把sql.RawBytes转成[]map[string]interface{}{}后,我想把里面的内容转为protobuf,所以,我先把m[colName] = *val,改为m[colName] = (*val).([]byte),再使用proto.unmarshal,但是我的proto.Message有多个字段,其中还包括引用了其他字段,发现proto.unmarshal行不通。因为引用了其他字段,所以在存入mysql之前,我都全部proto.marshal:

pbdescription := &pb.Consignment{
        Description: req.Description,
    }
    description, err := proto.Marshal(pbdescription)
    if err != nil {
        panic(err)
    }

    pbweight := &pb.Consignment{
        Weight: req.Weight,
    }
    weight, err := proto.Marshal(pbweight)
    if err != nil {
        panic(err)
    }

    pbcontainers := &pb.Consignment{
        Containers: req.Containers,
    }
    containers, err := proto.Marshal(pbcontainers)
    if err != nil {
        panic(err)
    }

    pbvesselid := &pb.Consignment{
        VesselId: req.VesselId,
    }
    vesselid, err := proto.Marshal(pbvesselid)
    if err != nil {
        panic(err)
    }

    // insert Vessel entity data
    rs, err := c.ExecContext(ctx, "INSERT INTO consignment (`description`, `weight`, `containers`, `vesselid`) VALUES(?, ?, ?, ?)",
        description, weight, containers, vesselid)
    if err != nil {
        return nil, status.Error(codes.Unknown, "failed to insert into Consignment-> "+err.Error())
    }
阅读 2.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题