php小编苹果为您介绍如何进行asn1 marshal/unmarshal并省略字段的方法。在处理asn1编码时,我们经常需要将数据进行编码(marshal)或解码(unmarshal),但有时候我们只关心其中的一部分字段,而不需要解析整个结构。为了达到这个目的,我们可以使用一些技巧来省略不需要的字段,从而提高处理效率。接下来,我们将详细介绍如何实现这一操作。
type bearer struct { CreatedAt time.Time `asn1:"generalized"` ExpiresAt time.Time `asn1:"generalized"` Nonce string Signature []byte `asn1:"-"` TTL time.Duration `asn1:"-"` Frequency int `asn1:"-"` } c := &bearer{ CreatedAt: time.Now() ExpiresAt: time.Now().Add(1*time.Minute()) Nonce: "123456789abcdefghijklmnop" Frequency: 1 } b, err := asn1.Marshal(*c) os.WriteFile("b64.txt", b, 0777)
将成功编组该结构,但是,当使用 Bash 检查该结构时 base64 -d b64.txt > b64.txt.der
我仍然可以看到 asn1:"-"
字段实际上已编组并写入文件,并且没有值的字段得到 Error: 对象长度为零.
。为什么 asn1:"-"
不像 json
那样工作?base64 -d b64.txt > b64.txt.der
我仍然可以看到 asn1:"-"
字段实际上已编组并写入文件,并且没有值的字段得到 Error: 对象长度为零.
。为什么 asn1:"-"
不像 json
那样工作?
因为 encoding/json
包是为了支持 -
选项而实现的,而encoding/asn1
不是。至于为什么,这里不是地方。接受 encoding/asn1
encoding/json
包是为了支持 -
选项而实现的,而encoding/asn1
不是。至于为什么,这里不是地方。接受 encoding/asn1
的主要目标是支持读写 X.509 证书,这并不意味着成为 ASN1 实现的“瑞士军刀”。
bearer.bearerAsn1
,所以bearer
如果要排除某些字段,请创建排除这些字段的结构类型。为了避免重复,您可以将这些“剥离”的结构嵌入到您自己的结构中,其中包括附加字段,例如:
type bearerAsn1 struct { CreatedAt time.Time `asn1:"generalized"` ExpiresAt time.Time `asn1:"generalized"` Nonce string } type bearer struct { bearerAsn1 Signature []byte TTL time.Duration Frequency int }🎜仅marshal/unmarshal 🎜的其他字段自然会被排除。🎜
以上是如何进行 asn1 marshal/unmarshal 并省略字段?的详细内容。更多信息请关注PHP中文网其他相关文章!