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
那樣運作?
因為encoding/json
# 套件是為了支援-
選項而實現的,而 encoding/asn1
不是。至於為什麼,這裡不是地方。接受 encoding/asn1
的主要目標是支援讀寫 X.509 證書,這並不意味著成為 ASN1 實現的「瑞士軍刀」。
如果要排除某些字段,請建立排除這些字段的結構類型。為了避免重複,您可以將這些「剝離」的結構嵌入到您自己的結構中,其中包括附加字段,例如:
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 bearer.bearerAsn1
,所以bearer
的其他欄位自然會被排除。
以上是如何進行 asn1 marshal/unmarshal 並省略字段?的詳細內容。更多資訊請關注PHP中文網其他相關文章!