gpt4 book ai didi

go - 如何将 row.Scan() int32 转换为 Golang gRPC protobuf Enum 字段?

转载 作者:数据小太阳 更新时间:2023-10-29 03:20:13 41 4
gpt4 key购买 nike

// agent.proto

message Agent {
Permission permission = 1;
google.protobuf.Timestamp born_time = 2;

message Permission {
Type type = 1;

enum Type {
KILLNONE = 0;
KILLALL = 1;
DANCE = 2;
}
}
}

然后将 SQL 行扫描到代理 protobuf 结构中:

// main.go

var a proto.Agent

.....

... row.Scan(&a.Permission.Type,...)

对于默认类型,该权限类型存储为简单的 MariaDB INT() value = 0。所以,我不能直接扫描它。因此,我在 Type int32 中创建了临时结构,并在尝试将临时结构字段映射到 protobuf 结构之后将行扫描到该临时结构中,但没有成功。当我想将 MariaDB 字符串值扫描到 []byte 类型字段时,我遇到了类似的问题,但我用我的临时结构 []byte(tmp.UUID) 解决了这个问题。

当使用非标准 protobuf 字段类型时,将数据库 ROW(单行)扫描到 protubuf 消息中的常见模式是什么?

编辑:是否应该有一些额外的 0 值处理?

最佳答案

我通常在业务领域内使用 Go 类型,并使用适配器与 protobuf 类型相互转换。

// Role represents a set of permissions
type Role struct {
KILLNONE = iota
KILLALL
DANCE
}

// Permission represents a set of agent permissions
type Permission struct {
Role Role
}

// ToProto converts a Permission Go type to a protobuf Permission
func (p Permission) ToProto() (proto.Permission) {
pb := proto.Permission{}
// assign p's properties to proto's respective properties
// with necessary type conversions.
...
return pb
}

protobuf 示例通常显示直接使用 protobuf 类型,但似乎适配器在该领域更常见。

关于go - 如何将 row.Scan() int32 转换为 Golang gRPC protobuf Enum 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55229214/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com