Maison > Article > développement back-end > Comment faire pour marshaler/démarcher asn1 et omettre des champs ?
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.
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)
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:"-" 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
encoding/json
est destiné Implémenté pour prendre en charge l'option -
et encoding/asn1
Non. Quant à savoir pourquoi, ce n’est pas le bon endroit. L'objectif principal de l'acceptation de 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
,所以bearer
Si 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 }🎜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!