如何使用 Golang 的 ASN.1 模块序列化类型化整数?



我想定义一个带有数字字段的ASN.1结构。我为这个数字使用了一个自定义类型,以明确处理什么类型的值,并让编译器捕捉一些与类型相关的错误(例如,试图使用语义上不适合字段的其他数值(。

但是,序列化程序不知道如何处理这个字段,因为它不是Go基元类型。

以下是一个说明问题的最小示例:

package main
import (
"encoding/asn1"
"fmt"
)
type MessageType uint
const (
Signal  MessageType = 1
Payload             = 2
Control             = 3
)
type Packet struct {
Type MessageType
// more stuff here ...
}
func main() {
fmt.Println(Signal)
var packet Packet
packet.Type = Payload
fmt.Println(asn1.Marshal(packet))
}

当我运行它时,错误为[] asn1: structure error: unknown Go type: main.MessageType。如果我使用纯整数而不是自定义的MessageType,它会起作用,但在这种情况下,我没有获得使用特定类型的好处。

围棋中处理这种情况的正确方法是什么?ASN1模块的文档没有提供任何解决这个问题的示例。

golangencoding/asn1是一个低级库。。。它不是ASN.1编译器

所以这是正常的,你只能编码基本类型的

在它调用编码/asn1库之前,您需要编写更多的代码

如果你想解决的问题很简单,你可以手动完成。

但是,使用ASN.1时的正常过程是:

  1. 编写ASN.1规范
  2. 使用工具编译它,并用您喜欢的语言生成存根
  3. 编写一些将使用这些存根的代码

我想你不会在Go 中找到免费的工具来做到这一点

最新更新