Go 1.9

Не так давно увидел свет Go 1.9 Давайте посмотрим что же поменялось. Самое важное изменение в языке — это алисы для типов: фича, созданная для постепенного восстановления кода. Архитектура алисов для типов описана в документе, а статья о рефакторниге охватывает эту тему еще более детально. Алисы типов представляются в следующем виде:

type T1 = T2

Это объявление создает алиас T1 для типа T2, тем же способом как byte является алиасом для uint8. 

Новый пакет math/bits предоставляет функции подсчета и манипуляции для беззнаковых целых чисел, использующие специальные инструкции CPU, где это возможно. Для примера: на x86-64 системах, bits.TrailingZeros(x) использует BSF инструкции.

В пакет sync добавился новый тип Map, безопасный для конкурентного доступа (потоко-безопасный). Вы можете прочитать об этом больше в документации к типу и узнать больше о создании данного типа с доклада на GopherCon 2017 (слайды). Map не является заменой для встроенного в Go типа ассоциативных массивов; пожалуйста прочитайте соответствующую документацию чтобы получить понимание и представления для каких целей использовать Map.

Также свою порцию добавки получил пакет testing. Новый метод Helper был добавлен в testing.T и testing.B, помечающий вызываемую функцию как тестовую вспомогательную функцию. Когда тестовый пакет выводит информацию о файле и строке, он показывает место вызова вспомогательной функции вместо того чтобы показывать строку в самой вспомогательной тестовой функции. 

Для примера, рассмотрим следующий тест:

package p

import "testing"

func failure(t *testing.T) { 
  t.Helper() // This call silences this function in error report
  t.Fatal("failure")
}

func Test(t *testing.T) { 
  failure(t)
}

Так как, failure идентифицирует себя как вспомогательная тестовая функция, сообщения об ошибке выводимое во время выполнения Test будет указывать на строку 11, где вызывается failure, вместо строки 7, где failure вызывает t.Fatal.

Пакет time теперь прозрачно отслеживает «монотонное» время в значении Time, делая вычисление времени выполнения между двумя вызовами (значениями) Time безопасной операцией, даже в присутствии обычной часов ОС (синхронизация часов ОС). Для примера, следующий кусок кода вычисляет точное время выполнения, даже если синхронизации обычных часов произойдет в течении одной секунды:

start := time.Now()
f()
elapsed := time.Since(start)

Смотрите документацию к пакету и документы к дизайну (архитектуре) для более подробной информации.

И напоследок, как часть усилий направленных чтобы сделать компилятор Go еще более быстрым, в Go 1.9 функции внутри пакета компилируется конкурентно (параллельно, одновременно).

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

 

13.09.2017









 
архив

подписка