https://devzone.org.ua/feed/tag/golang2024-03-09T09:31:01+00:00https://devzone.org.ua/40010
Видалення попередньої версії
Спочатку перевірте, чи не встановлена певна версія Go за допомогою пакетного менеджеру:
go version
Якщо так, попередньо переконайтесь, що її не використовують інші програми, після чого її можна видалити із системи:
apt remove golang
Додатково можна перевірити наявність старих файлів та зачистити їх:
rm -rf /usr/lib/go-ВЕРСІЯ
Встановлення останньої версії
Наступні кроки виконуються в домашній теці користувача, від якого планується запуск програми:
cd ~
Переходимо на сторінку завантажень Go і обираємо версію для потрібної архітектури:
wget https://go.dev/dl/go1.22.1.linux-amd64.tar.gz
Розпаковуємо архів, після чого його можна видалити:
tar -xzf go1.22.1.linux-amd64.tar.gz
rm go1.22.1.linux-amd64.tar.gz
Переміщуємо файли до системної теки від root:
sudo mv go /usr/local/
Створимо робочу теку Go для поточного користувача...]]>
2024-03-09T09:31:01+00:00https://devzone.org.ua/40009
Для транспорту даних використовує вбудований вузол Yggdrasil, не потребує його окремого встановлення а також може ізольовано працювати поряд з ним. Трафік, що передається - захищений і не потребує додаткового шифрування TLS.
З коробки, являє собою сервер, підключитись до якого можна через поштовий клієнт типу Thunderbird або DeltaChat. Утім, від класичних поштових серверів відрізняється протоколом транспорту, тому не є сумісним зі звичайними скриньками і працює у власній мережі. Yggmail варто сприймати саме як месенджер, оскільки він має тільки спільний поштовий інтерфейс IMAP / SMTP але іншу модель транспорту.
Встановлення
Yggmail знаходиться на стадії розробки, тому для встановлення будем...]]>
2024-03-09T08:53:20+00:00https://devzone.org.ua/39965
Ключове слово go для створення підпрограм
Канали, для зв'язку між підпрограмами
Контекстний пакет для поширення скасування (propagating cancellation)
Пакети sync та sync/atomic для примітивів нижчого рівня, таких як м'ютекси та атомарний доступ до пам'яті
Ці можливості мови та пакети надають багатий набір інструментів для створення паралельних програм. Можливо, ви ще не знаєте про набір високорівневих примітивів паралелізму, доступних у "розширеній стандартній бібліотеці", що знаходиться на golang.org/x/sync. У цій статті ми їх розглянемо.
Пакет singleflight
Як зазначено у документації до пакета, цей модуль надає механізм придушення дублюючих викликів функцій.
Цей пакет надзвичайно корисний у випадках, коли у відповідь на дії користувача ви виконуєте щось обчислювально дороге (або просто повільне, наприклад, доступ до мережі). Наприклад, скажімо, у вас є база даних з інформацією пр...]]>
2023-09-19T08:56:41+00:00https://devzone.org.ua/33985
Що таке тип помилки?
Тип помилки в Go є типом інтерфейсу.
type error interface {
Error() string
}
Таким чином, в основному, тип помилки - це все, що реалізує метод Error().
Створення екземпляра помилки
Існує два способи створення помилки.
Кожен виклик цих двох функцій повертає відмінне значення помилки, навіть якщо текст ідентичний.
fmt.Println(foo()==bar()) # false
Визначення очікуваних помилок
Визначення очікуваних помилок є ключовою технікою в Go, оскільки вона допомагає нам виявляти конкретні помилки та по різному їх обробляти.
package main
import (
"errors"
"fmt"
)
var ErrDivideByZero = errors.New("divide by zero")
func Divide(a, b int) (int, error) {
if b == 0 {
return 0, ErrDivideByZero...]]>
2022-06-21T10:29:00+00:00https://devzone.org.ua/33977
Управління залежностями
Додати або оновити залежність
go get -d github.com/path/to/module
Використовувати конкренту версію
go get -d github.com/dep/two/v2@v2.1.0
Використовувати конкретну гілку
go get -d github.com/dep/commit@branch
Оновити всі модулі у вказаному каталозі
go get -d -u ./...
Видалити залежність
go get -d github.com/dep/legacy@none
Корисні команди
Улаштувати або почистити go.mod та go.sum
go mod tidy
Завантажити залежності в кеш модулів
go mod download
Ініціалізувати новий модуль
go mod init github.com/path/to/module
Перевірити чому вказаний модуль є залежністю
go mod why -m github.com/path/to/module
Зібрати та встановити бінарний файл
go install github.com/path/to/bin@latest
Анатомія go.mod
Вибір мінімальної версії (MVS)
Для побудови програми, компілятору go необхідно знати, які саме залежнос...]]>
2021-05-19T05:21:00+00:00https://devzone.org.ua/37334
76% респондентів використовують Go для роботи, 62% — поза роботою, а 66% кажуть, що Go є критично важливою для успіху компанії.
92% опитаних задоволені мовою Go, 68% порадили б її своїм друзям чи колегам, а 6% — не радили б.
Серед причин, чому розробники не використовують Go, найчастіше зазначали роботу над проєктом іншою мовою (54%) або вибір команди на користь іншої мови (34%). 26% сказали, що їм критично бракує певної функції у Go.
Серед тих, кому критично бракує певної функції, 88% обрали узагальнення (generics).
Найчастіше Go використовують на Linux (63%) та macOS (55%).
Серед редакторів найпопулярнішими є VS Code (41%) та GoLand (35%).
Якби розробники могли удосконалити мову, найперше вони б обрали функцію завершення коду (Code completion), навігацію, покращили б продуктивність редактора та подбали...]]>
2021-03-17T13:23:44+00:00https://devzone.org.ua/37361
В екосистемі кібербеки це зараз помітна тенденція: автори шкідливих програм поступово відмовляються від C і C++ та переходять на мову Go, яку розробили в Google у 2007 році.
Видання ZDNet пише, що перше зловмисне ПЗ цією мовою створили у 2012 році. Однак до 2019-го шкідливі програми на Go були рідкістю. Саме протягом того ж 2019 року це стало досить повсякденним явище, зазначають дослідники Intezer.
Вони виокремлюють три причини, чому мова Go завоювала популярність. Перша — це легкість міжплатформної компіляції, тож можна створити зловмисне ПЗ для Windows, Mac і Linux з однієї кодової бази.
Друга — дослідникам безпеки досі складно аналізувати бінарні Go-файли та виконувати реверсивну розробку. Тож виявляють такі програми доволі рідко.
Третя причина пов'язана з тим, що Go має добре написаний мережевий стек, з яким легко пр...]]>
2021-03-02T15:28:20+00:00https://devzone.org.ua/37374
Go вже підтримує Linux на 64-розрядних ARM, Linux на 32-розрядних ARM для Raspberry Pi, Windows 10 IoT Core на 32-розрядних ARM та багато інших комбінацій архітектур й ОС. Досі не з'явилась підтримка систем ARM64 Windows 10, але розробники планують її додати у наступних релізах (можливо, у Go 1.7, що має вийти восени).
У Go протягом останніх двох років намагались удосконалити лінкер — щоб покращити продуктивність і знизити витрати пам'яті. Зараз Go компонує великі програми на 20-25% швидше, ніж у версії 1.15. До того ж цей процес витрачає на 5-15% менше пам'яті для linux/amd64, кажуть розробники.
Також у реліз додали пакет embed і директиву //go:embed , що потрібні для роботи з вбудованими файлами під час компіляції. З іншими оновленнями можна ознайомитись на с...]]>
2021-02-19T10:05:29+00:00https://devzone.org.ua/33968
Що таке управління сесіями?
Управління сесіями - це процес фіксації статусу користувача під час взаємодії з нашим застосунком. Як правило, веб-програма зберігає сеанси підключеного користувача з нашим застосунком. Ми всі помічали відстеження сеансів під час використання вебсайтів. Стан сесії пам’ятає, коли ми реєстрували свої облікові дані, інформацію про кошик у застосунках для електронної комерції, способи оплати, тощо.
Тож управління сесіями є ключовим фактором для будь-якого розробника програмного забезпечення. Коли сесія працює, програма читає та записує виключно в сховища сеансів, що зберігаються в пам'яті. Це також робить наш застосунок надзвичайно швидким та ефективним. Стан сеансу може бути змінним або постійним. Залежно від чутливості даних він може бути постійним або змінним.
Наприклад, історія може бути нестабільною, але ваші платіжні транзакц...]]>
2020-11-24T13:30:00+00:00https://devzone.org.ua/33959
Чи може браузер, з такою потужністю, скомпілювати та запустити ваш код?
Чому б ні? Я ніяк не міг проігнорувати такий захоплюючий виклик. Після чотирьох місяців натискання клавіш та перегляду документації я нарешті створив свою відповідь: Go Wasm.
Перейти Wasm https://go-wasm.johnstarich.com
Go Wasm - це середовище розробки на Go, в якому є все необхідне для написання та запуску коду повністю у браузері, використовуючи потужність WebAssembly (Wasm). Проєкт має відкритий вихідний код. Go Wasm складається з трьох основних компонентів WebAssembly: «операційної системи», редактора та оболонки.
У цій статті я покажу вам, що таке Go Wasm, як це працює і що попереду.
Пишіть за допомогою Go Wasm
Go Wasm дає можливість як писати, так і зап...]]>
2020-11-11T15:14:00+00:00https://devzone.org.ua/33938
Новачкові буває складно зрозуміти причини такого дизайну мови. Своїм студентам ми даємо необхідний контекст, і поступово вони вчаться програмувати, враховуючи та приймаючи те, що раніше виводило їх з рівноваги. Автор статті розбирає особливості Go, які бентежать початківців.
Відразу скажу, що ця стаття: моя особиста, повністю суб'єктивна думка. Список нижче - тільки невелика витримка без будь-яких критеріїв вибору. Для ясності розповім про себе: у мене близько 20 років досвіду роботи, я працював з C, C ++, Java, Scala, Python, R (якщо дивитися на R як на мову).
В основному я вважаю Go легкою мовою у вивченні. Напевно, завдяки чітко визначеному задуму, який усуває особливості, які передбачають складний синтаксис. Так чи інакше, я починаю список.
1. Непотрібне імпортування і зайві змінні
Go змушує дотримуватися мінімалізму. Ц...]]>
2020-10-19T10:55:00+00:00https://devzone.org.ua/33920
використовує Let's Encrypt для HTTPS;
виконує маршрутизацію запитів до API;
реалізує проміжну обробку запитів (middleware);
роздає статичні файли;
коректно завершує свою роботу.
Якщо ви хочете відразу побачити готовий код, зайдіть в репозиторій http-boilerplate на GitHub.
Hello World!
HTTP-сервер на Go пишеться досить швидко. Ось приклад з одним обробником, що повертає «Hello World!»:
package main
Якщо ви запустите цей код і відкриєте в бр...]]>
2020-09-24T14:24:00+00:00https://devzone.org.ua/33916
Сьогодні ми збираємося написати власний рушій FTS. До кінця цієї статті він зможе виконувати пошук по мільйонах документів менш ніж за мілісекунду. Почнемо з простих пошукових запитів, таких як «Видати всі документи зі словом cat», а потім розширимо рушій для підтримки складніших логічних запитів.
Примітка: найвідомішим рушієм повнотекстового пошуку є Lucene (а також Elasticsearch і Solr, побудовані на його основі).
Навіщо потрібен FTS
Перед тим, як писати код, ви можете запитати: «А чи не можна просто використовувати grep або цикл з перевіркою кожного документа на входження шуканого слова?» Так можна. Але це не завжди найк...]]>
2020-09-21T15:53:00+00:00https://devzone.org.ua/33906
Оскільки сама мова Go досить нова, у співтоваристві розробників не дуже суворо формулюють рекомендації з написання коду. Якщо розглянути аналогічні угоди, що діють в спільнотах старіших мов, наприклад, Java, то з'ясується, що більшість проєктів має схожу структуру. Це може дуже стати в нагоді, коли пишеш велику бази коду, проте, багато хто міг би наполягати, що в сучасних практичних контекстах це було б контрпродуктивно. У міру того, як ми переходимо до написання мікросистем і підтримки порівняно компактних баз коду, гнучкість Go в області структурування проєктів стає вельми привабливою.
Всім відомий приклад з hello world http на Golang , і його можна порівняти з аналогічними прикладами на інших мова...]]>
2020-08-31T12:59:00+00:00https://devzone.org.ua/33900
Аналіз продуктивності можна застосовувати для перевірки вузьких місць у програмі, застосовуючи науковий підхід при перевірці експериментів по налаштуванню. Ця стаття визначає загальний підхід до аналізу продуктивності та налаштування з використанням в якості прикладу вебсервера на Go.
Go тут особливо добре підходить, оскільки у нього є інструменти профілювання pprof в стандартній бібліотеці.
Стратегія
Давайте створимо зведений список для нашого структурного аналізу. Ми спробуємо використати деякі дані для прийняття рішень замість того, щоб вносити зміни, засновані на інтуїції або здогадах. Для цього зробимо так:
Визначаємо межі оптимізації (вимоги);
Розраховуємо транзакційне навантаження для системи;
Виконуємо тест (генеруємо дані);
Спостерігаємо;
Аналізуємо чи всі вимоги дотримуються;
Налаштовуємо науковим методом використовуючи гіпотезу;
Вик...]]>
2020-08-13T15:56:00+00:00https://devzone.org.ua/33877
У цій замітці я розповім як використовувати gogrep, а також VS Code розширення для зручнішої роботи з gogrep прямо з редактора.
Навіщо потрібен gogrep
Якщо у тезах, то gogrep може бути корисний при:
Рефакторінгу
Вивченню кодової бази
Пошуку підозрілого коду (приклад: ruleguard)
Розглянемо приклад, який демонструє витонченість і ефективність структурного пошуку.
Функції a() та b() виконують однакові операції:
func a(xs []int) []int {
xs = append(xs, 1)
xs = append(xs, 2)
return xs
}
func b(xs []int) []int {
xs = append(xs, 1, 2)
return xs
}
Припустимо, ми хочемо переписати всі місця, де виклики append можна схлопнути.
Спробуємо gogrep:
Знаходимо всі відповідні пари з допомогою x&nb...]]>
2020-07-07T12:58:20+00:00https://devzone.org.ua/38519
Два способи переходу
Розглянемо два типи функцій, які можна використовувати з Cloud Functions: функції HTTP і фонові функції.
Перші — викликаються HTTP-запитами. Вони слідують за http.HandlerFunc зі стандартної бібліотеки. Наприклад, функція HTTP, яка повертає IP-адресу абонента, може виглядати так:
// function.go
package function
Функції HTTP можуть бути доступні без додаткового API gateway layer — Cloud Functions надає URL HTTPS. Після спрацю...]]>
2019-01-17T13:36:25+00:00https://devzone.org.ua/38674
Тому в цій статті я хочу розповісти, як реалізувати архітектуру веб застосунків. З прикладами коду і загальними практиками (знайомими мені). Сеніори, кидайте помідорами виправляйте, якщо щось не так 😛.
Монолітний застосунок vs мікросервіси
За класикою, всі запити обробляються одним застосунком (монолітним), але, як виявилось, у 2018 році на піку популярності є архітектура розробки з допомогою мікросервісів.
Наприклад, архітектура бекенду codeguida виглядала б так: є зовсім різні, незалежні одна від одної, розгорнуті зовсім окремо 4 програми. Перша відповідає за реєстрацію, логін і збереження юзерів, друга — за створення, редагування статей, третя за коментарі, і четверта...]]>
2018-06-15T10:10:28+00:00https://devzone.org.ua/38814
Для тих, хто не знає як взаємодіють спільні бібліотеки: вони працюють подібно до DLL бібліотек у Windows. Але вони мають власний, окремий код, з доступом до інтерфейсу компілятора С.
Зауваження: Windows використовує DLL систему, і у такому випадку немає необхідності тримати у проекті код бібліотеки. Прикладом слугують DLL написані на C#, які можуть використовуватися на віртуальній машині. Я не користуюсь Windows, тому не протестував виконання бібліотек таким чином.
Ви маєте використовувати Golang 1.5+ та Ruby 1.8.7+.
С...]]>
2018-02-28T13:49:06+00:00https://devzone.org.ua/38871
Система типів Go великим планом
Система типів Go підтримує процедурні, об'єктно-орієнтовані та функціональні парадигми. І дуже обмежено підтримує узагальнене програмування. Хоча Go і явно виражена статична мова, вона забезпечує достатню гнучкість для динамічних методів через інтерфейси, функції першого класу та рефлексії. У системі типів Go відсутні можливості, які є загальними для більшості сучасних мов програмування:
Не існує типів виключень, оскільки обробка помилок Go заснована на коді, що повертається, та інтерфейсі помилок.
Відсутнє перевантаження операторів.
Немає перевантаження функцій (те саме ім'я функції з різними параметрами).
У функціях немає необов'язкових параметрів або параметрів за замовчуванням.
Всі ці упущення спеціально зроблені для...]]>
2018-01-18T15:42:22+00:00https://devzone.org.ua/39018
Нижче розказано про три головні особливості, які роблять Go унікальною мовою:
Легкість
Модель паралелізму
Обробка помилок
Легкість
Більшість сучасних мов, таких як Scala i Rust, мають великий функціонал і потужні можливості контролю типів даних і керування пам'яттю. Ці мови використовують найбільші досягнення мов їхнього часу, таких як С++, Java, C#. Проте, вони впровадили та нові можливості.
На відміну від них, Go обрав інший шлях і позбувся більшості застарілих особливостей і принципів.
Відсутність шаблонів
Шаблони є невід'ємною частиною більшості мов програмування. Вони часто роблять відладку коду складнішою, а повідомлення про помилки можуть бути не зрозумілими. Розробники Go вирішили просто відмо...]]>
2017-09-05T12:09:49+00:00https://devzone.org.ua/39027
Ви дізнаєтеся, що таке інтерфейс у Go, як їх реалізувати і які обмеження мають інтерфейси на відміну від контрактів.
Що таке інтерфейс у Go?
Інтерфейс – тип даних, який містить колекцію визначених, але не імплементованих(не реалізованих) методів.
Інтерфейс у Go має такий вигляд:
type Serializer interface {
Serialize() (string, error)
Deserialize(s string) error
}
Serializer – інтерфейс, який має 2 методи:
Serialize() – не приймає аргументів і повертає string та error;
Deserialize(s string) – приймає аргумент s, і повертає error.
Можливо, інтерфейс Serializable може здатися вам знайомим, і ви вже здогадалися, що метод Serialize() повертає серіалізовану версію цільового об'єкта, який може бути відтворений викликом Deserialize() і передасть оригінальний виклик Serialize().
Зверніть увагу, що вам не потріб...]]>
2017-08-10T07:28:52+00:00