Maison > développement back-end > Golang > Comment faire pour marshaler/démarcher asn1 et omettre des champs ?

Comment faire pour marshaler/démarcher asn1 et omettre des champs ?

PHPz
Libérer: 2024-02-09 10:57:08
avant
562 Les gens l'ont consulté

如何进行 asn1 marshal/unmarshal 并省略字段?

L'éditeur PHP Apple vous présentera comment effectuer le marshal/unmarshal asn1 et omettre des champs. Lorsqu'il s'agit de l'encodage asn1, nous avons souvent besoin d'encoder (maréchaler) ou de décoder (démarrer) les données, mais parfois nous ne nous soucions que de certains champs sans analyser la structure entière. Pour atteindre cet objectif, nous pouvons utiliser certaines techniques pour omettre les champs inutiles, améliorant ainsi l'efficacité du traitement. Ensuite, nous détaillerons comment y parvenir.

Contenu des questions

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)
Copier après la connexion

La structure sera marshalée avec succès, cependant, lors de l'inspection de la structure à l'aide de Bash base64 -d b64.txt > b64.txt.der Je vois toujours asn1:"-"< Le / code> les champs sont en fait marshalés et écrits dans le fichier, et les champs sans valeurs obtiennent <code>Erreur : la longueur de l'objet est nulle.. Pourquoi asn1:"-" ne fonctionne-t-il pas comme json ? base64 -d b64.txt > b64.txt.der 我仍然可以看到 asn1:"-" 字段实际上已编组并写入文件,并且没有值的字段得到 Error: 对象长度为零.。为什么 asn1:"-" 不像 json 那样工作?

解决方法

因为 encoding/json 包是为了支持 - 选项而实现的,而encoding/asn1 不是。至于为什么,这里不是地方。接受 encoding/asn1

Solution

Parce que le package encoding/json est destiné Implémenté pour prendre en charge l'option - et encoding/asn1</code ></a> Non. Quant à savoir pourquoi, ce n’est pas le bon endroit. L'objectif principal de l'acceptation de <code>encoding/asn1 est de prendre en charge la lecture et l'écriture de certificats X.509, il n'est pas censé être un « couteau suisse » des implémentations ASN1.

bearer.bearerAsn1,所以bearerSi vous souhaitez exclure certains champs, créez un type de structure qui exclut ces champs. Pour éviter les duplications, vous pouvez intégrer ces structures « épurées » dans vos propres structures qui incluent des champs supplémentaires, par exemple :

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
}
Copier après la connexion
🎜Seulement marshal/unmarshal 🎜Les autres champs seront naturellement exclus. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal