Search
Write a publication
Pull to refresh
9
0
Егор Клименко @mo0Oonnn

User

Send message

Вышел Go 1.23!

Привет, Хабр!

В этом посте я напишу все основные изменения в новой версии Go:

  1. Range-over func

    Эксперимент с range-over func теперь основательно является частью Go

    Подробнее про range-over func читать здесь: https://go.dev/wiki/RangefuncExperiment

  2. Телеметрия

    Добавили Go Telemetry для отслеживания работы Go Toolchain. Сами разработчики Golang советуют включить эту опцию, так как она еженедельно будет анонимно отсылать информацию на https://telemetry.go.dev/ для улучшения работы Toolchain

    Подробнее про команду "go telemetry" читать здесь: https://pkg.go.dev/cmd/go#hdr-Manage_telemetry_data_and_settings

  3. Таймер

    Изменения также коснулись и "time.Timer" и "time.Ticker"

    Во-первых - "Тикеры" и "Таймеры", не упоминающиеся программой - становятся допустимыми для сборки мусора, даже если не был вызван метод "Stop"

    Во-вторых - теперь каналы "Таймера" и "Тикера" не буферированы. Это объясняется тем, что для вызова методов Reset или Stop не будет устаревших подготовленных значений

  4. Unique

    Добавлен новый пакет "unique": https://pkg.go.dev/unique

  5. Iter

    Добавлен новый пакет "iter": https://pkg.go.dev/iter

  6. Slices

    В пакет "slices" добавили несколько функций, которые работают с итераторами: https://go.dev/doc/go1.23#iterators

  7. Maps

    В пакет "maps" тоже добавили несколько функций для работы с итераторами: https://go.dev/doc/go1.23#iterators

  8. Structs

    Добавлен новый пакет "structs", который предоставляет новые типы для struct-полей: https://pkg.go.dev/structs

Это и еще многое читайте на официальном сайте Go!

Tags:
Total votes 3: ↑2 and ↓1+3
Comments2

Go: маршрутизация без лишних пакетов

Привет, Хабр!

Недавно я открыл для себя “net/http” - роутер, который изначально есть в Go. В этом посте я опишу его удобство и, возможно, Вы - как и я, начнете его использовать, пусть он и не такой быстрый, как маршрутизаторы, основанные на fasthttp.

1. Не надо подключать сторонние пакеты

Достаточно только написать строку import “net/http”. Не надо подключать сторонние пакеты и тратить время на написание команд в консоли

2. Отличные возможности

В нем есть почти все то, что есть современных маршрутизаторах по типу Chi или GoFiber. Это очень удобно

3. Возможность расширения

Вы сами пишете многие функции. Значит, что не ограничены возможностями роутера

4. Контроль

Многое придётся делать самому ⇒ Вы будете знать, почему и как все происходит

Многое придётся делать своими руками, а в таком случае будете знать, почему и как все работает

Но, конечно, есть минусы:

1. Middleware

Придется писать все middleware собственными руками

2. Скорость

Он не такой быстрый, как роутеры, написанные с использованием fasthttp

3. Ошибки

Думаю, для многих это будет самым большим минусом. Нельзя возвращать ошибки из хэндлеров

Напишите в комментариях каким роутером пользуетесь Вы и почему именно им!

Tags:
Total votes 1: ↑1 and ↓0+3
Comments3

Go для веб-разработки

Взято с https://www.linkedin.com/pulse/exploring-go-language-web-development-muhammad-irfan-q3nvf

Привет, Хабр!

Одна из тех вещей, которыми я занимаюсь с использованием Go — веб разработка. Я могу написать как фулл‑стэк вебсайт, так и просто бэкэнд. В этом коротком посте я дам Вам несколько советов и практик по веб‑разработке с использованием Golang

1. Роутеры

Есть много роутеров, и я советую попробовать каждый, чтобы найти лучший для себя. Но если Вы не хотите этого делать, то вот несколько хороших роутеров:

  1. Chi router — роутер, которым я пользуюсь. Полная совместимость со стандартным пакетом Go

  2. Go fiber — скоростной роутер

2. Jet templates

Очень удобная библиотека для использование темплэйтов. Очень упростила мне жизнь, если Вы пользуетесь теплэйтами в Go — упростит и Вам

3. Используйте middleware

Не используете middleware — ошибка. Не используете встроенные в пакет роутера middleware — фатальная ошибка. Есть очень много хороших middleware, которые уже встроены в используемый Вами роутер, например — Chi. Очень полезно использовать «Recoverer», или подобные.

4. Используйте аккуратную и удобную Вам структуру проекта

Не создавайте все файлы вместе. Разбейте все по папкам, как удобно Вам, в интернете есть много примеров

Вот и все, надеюсь я хоть как‑то Вам помог! Еще можете почитать мои посты по темам Golang: лучшие практики, 5 библиотек Golang для эффективной разработки веб‑приложений и т. д.

Tags:
Total votes 3: ↑2 and ↓1+3
Comments2

Golang: лучшие практики

Взято с https://github.com/golang/go
Взято с https://github.com/golang/go

Вы новичок в Golang? Или сомневаетесь, что пишете код правильно? Тогда вот лучшие практики при написании кода на Golang, большинство которых взято с “Effective Go”, а некоторые, применимые ко всем языкам программирования - с книги “Чистый Код

1. Названия функций-геттеров

Не надо в Golang писать названия функций-геттеров с приставкой “Get”.

То есть, вместо func GetUser() , пишите func User() . Но это не применимо к функциям, которые начинаются с маленькой буквы

2. Названия функций-сеттеров

В отличии от функций-геттеров, функции-сеттеры необходимо писать с приставкой “Set”.

То есть, если Ваша функция - сеттер юзера, пишите func SetUser(). Но это так же не применимо к функциям, которые начинаются с маленькой буквы

3. Названия однометодовых интерфейсов

Если Ваш интерфейс однометодовый, то по соглашению его названием должно являтся название метода + суффикс “er”. Например: “Reader, Writer, Formatter и т.д”

4. Избежание перераспределений

При создании среза, используйте make с указанием длины. Так Вы избежите перераспределений, что сделает Вашу программу чуть быстрее (больше советов про скорость программ на Golang есть в моём посте)

5. Тесты

Если Вы не пишите тесты для своих программ, Вы делаете ошибку. Это важная часть и ее лучше не избегать. Пишите функциональные тесты, пишите модульные, пишите бенчмарки(об этом я также писал в своём посте)

6. Размер функций

Не пишите огромные функции. Постарайтесь не превышать 30 строк кода. Разбейте ее на много маленьких!

Tags:
Total votes 2: ↑2 and ↓0+4
Comments0

5 библиотек Golang для эффективной разработки веб-приложений

Доброго времени суток, уважаемые гоферы. Возможно Вы новичок в разработке веб-приложений, а возможно просто хотите открыть для себя новые библиотеки. Если это так, то вот 5 библиотек, многими из которых я активно пользуюсь

1. CHI Router

Как по мне, самая лучшая библиотека для веб разработки. Полная совместимость с роутером голанга, а также большое кол-во middleware - вот главные плюсы Chi router. Им я пользуюсь на постоянной основе

2. Go Fiber

Если Вам не понравился Chi router - есть Go FIber. Быстр, но нет совместимости со встроенным роутером. Если для Вас это не проблема - используйте его. Для меня его преимущества - скорость и возможность возвращать ошибки из хэндлеров

3. Jet templates

Насколько сильно мне упростила эта библиотека жизнь. Наипростейшее использование темплэйтов в Golang. Если Вам не нравится встроенное их использование, Jet - Ваше спасение

4. Scs

Отличный менеджер сессий. Если Вам надо использовать сессии - Scs

5. CHI Render

Отличная библиотека от тех же людей, что сделали CHI router. Помогает работать с HTTP запросами

На этом все, но могу также порекомендовать такие библиотеки, как testify для упрощения написания тестов и cleanenv для чтения конфига, ведь это так же важно.

Tags:
Total votes 1: ↑1 and ↓0+3
Comments2

Go: Раскрытие потенциала скорости

Я всегда борюсь за скорость. Началось это все с того, как я прочитал книгу “Грокаем алгоритмы” и меня заинтересовало измерение скорости выполнения. Потом, решая задачи на LeetCode я расстраивался, если алгоритм получался медленным. Недавно мне пришла идея написать пост на эту тему, а во время написания изучить этот вопрос получше. Я прочитал не мало статьей, большинство из которых - англоязычные.Так что вот советы по увеличению скорости Вашего приложения на Golang :

1. Выделять ёмкость для среза с помощью make

При создании среза выделяйте ёмкость с помощью make, так Вы избавитесь от перераспределений

2. При возвращении указателя, объявлять его при создании переменной

 func (r Ruleset) Match(path string) (*Rule, error) {
 	for i := len(r) - 1; i >= 0; i-- {
		rule := r[i] //так НЕ надо
		rule := &r[i] //так надо
 		match, err := rule.Match(path)
 		if match || err != nil {
			return &rule, err //так НЕ надо
			return rule, err //так надо
 		}
 	}
 	return nil, nil
}

3. Пишите бенчмарки

Пишите бенчмарки для вашего приложения, так Вы поймете, в каком месте оно работает медленнее всего. Источник для того, чтобы научиться писать бенчмарки: https://dave.cheney.net/2013/06/30/how-to-write-benchmarks-in-go и др.

4. Используйте горутины!

Когда есть возможность, используйте горутины. Например, когда результат 2-х операций не зависит друг от друга, можете использовать горутины. Думаю, доказывать, что таким образом приложение становится быстрее, не надо :)

Tags:
Total votes 5: ↑2 and ↓3+3
Comments4

NeoVim: Ускорь свою разработку

Взято с https://in.pinterest.com/pin/beware-to-all-vim-programmers--1074249317335744187/

Этот пост отсылается на мою статью. Если Вы хотите почитать про NeoVim больше, смело переходите по этой ссылке: https://habr.com/ru/sandbox/219656/

Скорее всего, если у Вас Linux, то Вы пользовались каким-либо текстовым редактором по типу Vim, Nano, Emacs. Что из них лучше, можно спорить бесконечно (Vim выиграет). Даже если Вы пользуетесь одной из этих программ, наверняка для написания кода Вы используете полноценную IDE. Сейчас я попытаюсь Вас заставить побудить пересесть на Vim, а точнее на NeoVim с Вашей любимой IDE, вроде JetBrains IDE или VSCode.

Я пользуюсь NeoVim. Перед ним я пользовался VSCode, а так же JetBrains IDE в виде GoLand, так как мой основной язык программирования - Golang. Сравнив их, я смело говорю, что если не NeoVim, то VSCode. С JetBrains IDE отдельная история, там сначала больше половины ОЗУ тратилось, а потом еще и AI подсказки перестали нормально работать. Если Вам нравится JetBrains IDE только из-за AI-подсказок, то удаляйте его, скачивайте NeoVim и прикручивайте к нему AI. Это можно сделать и у меня самого стоит Codeium для этого случая.

Возможно Вы скажете, что Вам лень настраивать NeoVim. Я Вам скажу, что при желании настраивать надо будет только подсказки для вашего ЯП. У меня установлен NVChad, но Вы можете установить тот же Lunar Vim. Установив, Вы можете настроить все кнопки под себя(это не сильно сложно).

Сделав это, Вы получаете огромный выигрыш в скорости и удобстве. Пробуйте NeoVim!

Tags:
Total votes 5: ↑3 and ↓2+4
Comments13

Information

Rating
Does not participate
Registered
Activity

Specialization

Backend Developer, Web Developer
Golang
Web development
SQL
Linux
Git
PostgreSQL
REST
Database
Algorithms and data structures
English