PHP Editor Apple akan memperkenalkan anda cara melaksanakan asn1 marshal/unmarshal dan abaikan medan. Apabila berurusan dengan pengekodan asn1, kita selalunya perlu mengekod (marshal) atau menyahkod (unmarshal) data, tetapi kadangkala kita hanya mengambil berat tentang beberapa medan tanpa menghuraikan keseluruhan struktur. Untuk mencapai matlamat ini, kami boleh menggunakan beberapa teknik untuk mengetepikan medan yang tidak perlu, dengan itu meningkatkan kecekapan pemprosesan. Seterusnya, kami akan terperinci bagaimana untuk mencapai ini.
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)
Struktur akan berjaya disusun, bagaimanapun, apabila memeriksa struktur menggunakan Bash base64 -d b64.txt > b64.txt.der
Saya masih melihat asn1:"-"< The / kod> medan sebenarnya disusun dan ditulis pada fail, dan medan tanpa nilai mendapat <code>Ralat: Panjang objek adalah sifar.
. Mengapa asn1:"-"
tidak berfungsi seperti json
? base64 -d b64.txt > b64.txt.der
我仍然可以看到 asn1:"-"
字段实际上已编组并写入文件,并且没有值的字段得到 Error: 对象长度为零.
。为什么 asn1:"-"
不像 json
那样工作?
因为 encoding/json
包是为了支持 -
选项而实现的,而encoding/asn1
不是。至于为什么,这里不是地方。接受 encoding/asn1
pengekodan/json
adalah untuk Dilaksanakan untuk menyokong pilihan -
dan encoding/asn1</code ></a> Tidak. Kenapa, ini bukan tempatnya. Matlamat utama menerima <code>encoding/asn1
adalah untuk menyokong membaca dan menulis sijil X.509, ia tidak dimaksudkan untuk menjadi "Pisau Tentera Swiss" pelaksanaan ASN1.
bearer.bearerAsn1
,所以bearer
Jika anda ingin mengecualikan medan tertentu, buat jenis struct yang mengecualikan medan ini. Untuk mengelakkan pertindihan, anda boleh membenamkan struktur "dilucutkan" ini ke dalam struktur anda sendiri yang termasuk medan tambahan, contohnya:
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 }
Atas ialah kandungan terperinci Bagaimana untuk melakukan asn1 marshal/unmarshal dan omit fields?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!