суббота, 29 февраля 2020 г.

Релиз Go 1.14: основная библиотека

Новый пакет хэширования последовательности байтов

Go 1.14 включает новый пакет hash/maphash, который предоставляет хэш-функции для последовательностей байтов. Эти хэш-функции предназначены для использования для реализации хэш-таблиц или других структур данных, которые должны отображать произвольные строки или байтовые последовательности в равномерное распределение по 64-разрядным целым числам без знака.

Хэш-функции устойчивы к столкновениям (коллизиям), но криптографически небезопасны.

Хэш-значение данной последовательности байтов согласовано в рамках одного процесса, но будет различным в разных процессах.

Незначительные изменения в библиотеке

Как всегда, в библиотеку внесены различные незначительные изменения и обновления, сделанные с точки зрения совместимости с Go 1.

crypto/tls

Поддержка SSL версии 3.0 (SSLv3) была удалена. Обратите внимание, что SSLv3 - это криптографически взломанный протокол, предшествующий TLS.

TLS 1.3 больше нельзя отключить с помощью переменной среды GODEBUG. Используйте поле Config.MaxVersion для настройки версий TLS.

Когда через поле Config.Certificates предоставляется несколько цепочек сертификатов, автоматически выбирается первая, совместимая с партнером. Это позволяет, например, предоставить ECDSA и сертификат RSA и позволить пакету автоматически выбрать лучший. Обратите внимание, что производительность этого выбора будет низкой, если не установлено поле Certificate.Leaf.

Новые функции CipherSuites и InsecureCipherSuites возвращают список реализованных в настоящее время наборов шифров. Новая функция CipherSuiteName возвращает имя для идентификатора набора шифров.

Новые методы (*ClientHelloInfo).SupportsCertificate и (*CertificateRequestInfo).SupportsCertificate показывают, поддерживает ли одноранговый узел определенный сертификат.

Пакет tls больше не поддерживает устаревшее расширение Next Protocol Negotiation (NPN) и теперь поддерживает только ALPN. В предыдущих релизах он поддерживал оба. Изменений в API нет, и приложения должны работать так же, как и раньше. Большинство других клиентов и серверов уже удалили поддержку NPN в пользу стандартизированной ALPN.

Подписи RSA-PSS теперь используются, когда они поддерживаются в рукопожатиях TLS 1.2. Это не повлияет на большинство приложений, но пользовательские реализации Certificate.PrivateKey, которые не поддерживают подписи RSA-PSS, должны будут использовать новое поле Certificate.SupportedSignatureAlgorithms, чтобы отключить их.

Config.Certificates и Config.GetCertificate теперь могут быть равны nil, если задан Config.GetConfigForClient. Если обратные вызовы не возвращают ни сертификаты, ни ошибку, теперь отправляется unrecognized_name.

Новое поле CertificateRequestInfo.Version предоставляет версию TLS для обратных вызовов сертификатов клиентов.

Новые константы TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 и TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 используют итоговые имена для наборов шифров, ранее называвшихся TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 и TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305.

crypto/x509

Certificate.CreateCRL теперь поддерживает издателей Ed25519.

debug/dwarf

Пакет debug/dwarf теперь поддерживает чтение DWARF версии 5.

Новый метод (*Data).AddSection поддерживает добавление произвольных новых разделов DWARF из входного файла в данные DWARF.

Новый метод (*Reader).ByteOrder возвращает порядок байтов текущей единицы компиляции. Это может использоваться для интерпретации атрибутов, которые закодированы в собственном порядке, таких как описания местоположения.

Новый метод (*LineReader).Files возвращает таблицу имен файлов из программы чтения строк. Это может использоваться для интерпретации значения атрибутов DWARF, таких как AttrDeclFile.

encoding/asn1

Unmarshal теперь поддерживает ASN.1 строковый тип BMPString, представленный новой константой TagBMPString.

encoding/json

Тип Decoder поддерживает новый метод InputOffset, который возвращает смещение байта входного потока текущей позиции декодера.

Compact больше не экранирует символы U+2028 и U+2029, что никогда не было документированной функцией. Для правильного экранирования смотрите HTMLEscape.

Number больше не принимает недействительные числа, чтобы более точно следовать задокументированному поведению. Если программе необходимо принимать недопустимые числа, такие как пустая строка, рассмотрите возможность переноса типа с помощью Unmarshaler.

go/build

Тип Context имеет новое поле Dir, которое можно использовать для установки рабочего каталога для сборки. По умолчанию используется текущий каталог запущенного процесса. В режиме модуля это используется для определения местоположения основного модуля.

go/doc

Новая функция NewFromFiles вычисляет документацию пакета из списка *ast.File связанных примеров с соответствующими элементами пакета. Новая информация доступна в новом поле Examples в типах Package, Type и Func, а также в новом поле Suffix в типе Example.

io/ioutil

TempDir теперь может создавать каталоги, имена которых имеют предсказуемые префиксы и суффиксы. Как и в случае TempFile, если шаблон содержит '*', случайная строка заменяет последнюю '*'.

log

Новый флаг Lmsgprefix может использоваться, чтобы сообщить функциям журналирования выдавать необязательный выходной префикс непосредственно перед сообщением журнала, а не в начале строки.

math

Новая функция FMA вычисляет x*y+z в плавающей точке без промежуточного округления вычисления x*y. Несколько архитектур реализуют это вычисление, используя специальные аппаратные инструкции для дополнительной производительности.

math/big

Метод GCD теперь позволяет входам a и b быть нулевыми или отрицательными.

math/bits

Новые функции Rem, Rem32 и Rem64 поддерживают вычисление остатка, даже если частное переполнено.

mime

Тип файлов .js и .mjs по умолчанию теперь text/javascript, а не application/javascript. Это соответствует проекту IETF, в котором application/javascript рассматривается как устаревшее.

mime/multipart

Новый метод Reader NextRawPart поддерживает выборку следующей части MIME без прозрачного декодирования данных для печати в кавычках.

net/http

Новый метод Values типа Header может использоваться для извлечения всех значений, связанных с канонизированным ключом.

Новое поле DialTLSContext типа Transport можно использовать для указания дополнительной dial функции для создания соединений TLS для не проксируемых запросов HTTPS. Это новое поле можно использовать вместо DialTLS, который сейчас считается устаревшим; DialTLS будет продолжать работать, но новый код должен использовать DialTLSContext, что позволяет Transport отменять dial, как только они больше не нужны.

В Windows ServeFile теперь правильно обслуживает файлы размером более 2 ГБ.

net/http/httptest

Новое поле EnableHTTP2 типа Server поддерживает включение HTTP/2 на тестовом сервере.

net/textproto

Новый метод Values типа MIMEHeader ​​можно использовать для извлечения всех значений, связанных с канонизированным ключом.

os/signal

В Windows события CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT и CTRL_SHUTDOWN_EVENT теперь генерируют сигнал syscall.SIGTERM, аналогично тому, как Control-C и Control-Break генерируют сигнал syscall.SIGINT.

plugin

Пакет plugin теперь поддерживает freebsd/amd64.

reflect

StructOf теперь поддерживает создание типов структур с неэкспортированными полями, устанавливая поле PkgPath в элементе StructField.

runtime

runtime.Goexit больше не может быть прерван рекурсивной panic/recover.

В macOS SIGPIPE больше не пересылается обработчикам сигналов, установленным до инициализации среды выполнения Go. Это необходимо, потому что macOS доставляет SIGPIPE в основной поток, а не в поток, записывающий в закрытый канал.

runtime/pprof

Сгенерированный профиль больше не включает псевдо-ПК, используемые для встроенных меток. Информация о символах встроенных функций кодируется в формате, ожидаемом инструментом pprof. Это исправление для регрессии, введенной во время последних релизов.

strconv

Тип NumError теперь имеет метод Unwrap, который можно использовать для получения причины сбоя преобразования. Это поддерживает использование значений NumError с ошибками. Чтобы узнать, является ли основной ошибкой strconv.ErrRange или strconv.ErrSyntax.

sync

Разблокировка высоко конкурентного Mutex теперь напрямую возвращает процессор к следующей процедуре, ожидающей этого Mutex. Это значительно повышает производительность мьютексов с высокой конкуренцией на машинах с большим количеством процессоров.

testing

Пакет testing теперь поддерживает функции очистки, вызываемые после завершения теста или бенчмарка, вызывая соответственно T.Cleanup или B.Cleanup.

text/template

Пакет text/template теперь правильно сообщает об ошибках, когда аргумент в скобках используется в качестве функции. Это чаще всего проявляется в ошибочных случаях, таких как {{if (eq .F "a") or (eq .F "b")}}. Это должно быть записано как {{if or (eq .F "a") (eq .F "b")}}. Ошибочный случай никогда не работал, как ожидалось, и теперь будет сообщаться с ошибкой - can't give argument to non-function.

unicode

Пакет unicode и связанная с ним поддержка по всей системе были обновлены с Unicode 11.0 до Unicode 12.0, что добавляет 554 новых символа, включая четыре новых сценария и 61 новый эмодзи.


Читайте также:


Купить gopher

Комментариев нет:

Отправить комментарий