php エディター Apple は、asn1 マーシャル/アンマーシャルを実行し、フィールドを省略する方法を紹介します。 asn1 エンコードを扱う場合、多くの場合、データをエンコード (マーシャル) またはデコード (アンマーシャル) する必要がありますが、構造全体を解析せずに一部のフィールドのみを考慮する場合があります。この目標を達成するには、いくつかのテクニックを使用して不要なフィールドを省略し、それによって処理効率を向上させることができます。次に、これを実現する方法について詳しく説明します。
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:"-"
フィールドは実際にはマーシャリングされてファイルに書き込まれ、値のないフィールドは エラー: オブジェクトの長さはゼロです。
を取得します。 asn1:"-"
が json
のように機能しないのはなぜですか?
encoding/json
パッケージは、-
オプションと # をサポートするために実装されているためです。 ##encoding/asn1 いいえ。なぜかというと、ここはそんな場所ではないんです。 encoding/asn1
を受け入れる主な目的は、X.509 証明書の読み書きをサポートすることであり、ASN1 実装の「スイス アーミー ナイフ」を意図したものではありません。
リーリー
bearer.bearerAsn1 のみがマーシャル/アンマーシャルされるため、bearer
の他のフィールドは当然除外されます。
以上がasn1 のマーシャル/アンマーシャルを実行し、フィールドを省略するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。