И да, в Go есть парсер ASN.1 в стандартной библиотеке, но он
поддерживает только DER (это такой довольно строгий и однозначный
формат), а в SNMP используется BER. Например длина кодируется так,
если старший бит в байте длины равен нулю, то длина это оставшиеся
биты, а если он 1, то оставшиеся биты это сколько байт следующих
содержат длину. Например 0x05 - длина 5 байт 0x81 0xff длина 255
байт. А вот BER позволяет себе вольности, например длина 5 байт
может быть в такой форме:
0x82 0x00 0x05. А еще есть неопределенная длина для составных типов, например байт длины 0x80 значит далее идет SEQUENCE (тип в который запихнули примитивные типы) а в конце 0x00 0x00 - это конеч этой последовательности.
А еще могут быть такие последовательности вложенные в такие последовательности :-) вобщем форкнул я парсер гошный и сделал его умеющим это распарсить, собирать же можно строго - приемник поймет DER - он однозначный.
Вот вам парсер если что - там много много тестов. https://github.com/OlegPowerC/asn1modsnmp