37.1K subscribers
1.46K photos
34 videos
5 files
1.62K links
加入频道
👣 Nuke — арена памяти для Go

На GitHub под лицензией Apache License 2.0 опубликован проект под названием Nuke v1.1.0. Это реализация арены памяти для Go с бенчмарками и даже реализацией параллельной арены.

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

🔘повышение производительности: распределяя память большими блоками, арены памяти сокращают накладные расходы, связанные с частыми вызовами системного распределителя памяти;

🔘улучшенная локальность кэша. Арены памяти также могут улучшить локальность кэша, размещая тесно связанные объекты в одном блоке памяти;

🔘эффективность сборки мусора. Использование арен памяти может снизить рабочую нагрузку на сборщик мусора за счёт уменьшения количества объектов, которые необходимо отслеживать и собирать, что приводит к меньшему времени паузы и более предсказуемой производительности.

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

🖥 Nuke

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Ente

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

Альтернатива ва Google Photos и Apple Photos.

#golang #backend

Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Comentario — сервер комментариев на Go с открытым исходным кодом

С его помощью можно добавлять возможность комментирования к любым статическим страницам, вставив лишь пару HTML-тегов.
Comentario написан на Go и Angular и использует БД PostgreSQL для хранения комментариев.

Возможности и фичи:
Комментарии неограниченной вложенности
Роли пользователей и привилегия superuser
Возможность банить пользователей
«Закреплённые» комментарии
Голосование за комментарии
Операции с доменом (сброс, очистка, экспорт и т.д.)
Импорт комментариев из Commento и Disqus
Модерация комментариев и гибкие её настройки
Емэйл-уведомления о модерации и об ответах
Статистика просмотров и комментариев
Поддержка всех версий PostgreSQL с 10 по 16 включительно
Логин через Google, Twitter/X, GitHub, GitLab, Facebook
Почти стопроцентное покрытие end-to-end-тестами

Пользуйтесь)
🤓 Comentario

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥Подборка лучших обучающих каналов для программистов.

➡️ Делитесь с коллегами и cохраняйте себе, чтобы не потерять

⚡️ Frontend
Javascript академия - крупнейший js канал
React - лучшие гайды и советы по работе с react
Frontend - тутрориалы, уроки, гайды, код
PHP
Книги frontend
Задачи frontend

💥 Хакинг Kali Linux

Kali linux
linux_kal - kali чат
Информационная безопасность

🚀 Data Science

Анализ данных - полезные фишки, код, гайды и советы, маст-хэв датасаентиста
Data Jobs - ds вакансии
Аналитик данных
Data Science книги - актуальные бесплатные книги
Big data

#️⃣C#

С# академия
С# заметки — код, лучшие практики, заметки программиста c#
С# задачи и тесты
С# библиотека - актуальные бесплатные книги
C# вакансии - работа

Машинное обучение

Ml Собеседование - подготовка к собеседовению мл, алгоритмам, кодингу
Ml ru - актуальные статьи, новости, код и обучающие материалы
Ml Jobs - вакансии ML
ML Книги - актуальные бесплатные книги МО
ML чат
Machine Learning - полезные статьи новости гайды и разбор кода

🏆 Golang
Golang - подробные гайды, разбор кода, лучшие практики, заметки
Golang собеседование
Golang вакансии
Golang книги
Golang задачи и тесты
Golang чат
Golang news - новости go

🐍 Python

Python/django
Python Собеседование - подготовка к собеседовению python и разбор алгоритмов
Pro python - статьи, новости, код и обучающие материалы
Python Jobs - вакансии Python
Python чат
Python книги

Java

Java академия
Java вакансии
Java чат
Java вопросы с собеседований
Java книги

🛢Базы данных
Sql базы данных
Библиотека баз данных
SQL чат

💻 C++

C++ академия
С++ книги
C++ задачи - подготовка к собеседовению мл, алгоритмам
C++ вакансии

🐧 Linux

Linux academy

🦀 Rust
Rust программирование
Rust чат
Rust книги для программистов

📲 Мобильная разработка
Android разработка
Мобильный разработчик гайды и уроки

🇬🇧 Английский для программистов

🧠 Искусственный интеллект
ИИ и технологии
Neural - нейросети для работы и жизни
Книги ИИ
Artificial Intelligence

🔥 DevOPs
Devops для программистов
Книги Devops

🌟 Docker/Kubernets
Docker
Kubernets

📓 Книги
Библиотеки Книг для программситов

💼 Папка с вакансиями:
Папка Go разработчика:
Папка Python разработчика:
Папка Data Science
Папка Java разработчика
Папка C#
Папка Frontend
👣 Возможный вопрос на собесе: rune и byte — в чём разница?

rune - это 32-х битный тип, представляющий юникодные символы в кодировке UTF-32 aka UCS-4.

byte - это универсальный 8-битный тип.

rune используется для работы с не-ASCII символами в строках. Есть встроенное приведение []rune для типа string, которое парсит строку из UTF-8 (представление с переменной длиной байтов) в представление с фиксированной длиной байтов.

В случае не-ASCII строк разница между []byte(str) и []rune(str) разительна. Строка Привет, мир!:
Байты:  [208 159 209 128 208 184 208 178 208 181 209 130 44 32 208 188 208 184 209 128 33]
Руны: [1055 1088 1080 1074 1077 1090 44 32 1084 1080 1088 33]


Приведение []rune(string) эквивалентно вот такой функции:
func ToRunes(bytes []byte) []rune {
result := []rune{}
for i := 0; i < len(bytes); {
r, size := utf8.DecodeRune(bytes[i:])
result = append(result, r)
i += size
}
return result
}


📎На картинке текст программы с преобразованием Привет, мир! в руны и обратно

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
💻 Kube No Trouble (kubent) — инструмент для проверки использования устаревших API в кластере Kubernetes

Особенно это актуально сейчас, на фоне распространения Kubernetes 1.16, многие API становятся устаревшими.
kubent без проблем работает:
— с YAML или JSON
— с kubectl, используется аннотация kubectl.kubernetes.io/last-applied-configuration
— с Helm v3

Установка kubent:
sh -c "$(curl -sSL https://git.io/install-kubent)"
ну или brew install kubent

Функционал легко посмотреть через -h, как обычно:
./kubent -h
Usage of ./kubent:
-A, --additional-annotation strings additional annotations that should be checked to determine the last applied config
-a, --additional-kind strings additional kinds of resources to report in Kind.version.group.com format
-c, --cluster enable Cluster collector (default true)
-x, --context string kubeconfig context
-e, --exit-error exit with non-zero code when issues are found
-f, --filename strings manifests to check, use - for stdin
--helm3 enable Helm v3 collector (default true)
-k, --kubeconfig string path to the kubeconfig file
-l, --log-level string set log level (trace, debug, info, warn, error, fatal, panic, disabled) (default "info")
-o, --output string output format - [text|json|csv] (default "text")
-O, --output-file string output file, use - for stdout (default "-")
-t, --target-version string target K8s version in SemVer format (autodetected by default)
-v, --version prints the version of kubent and exits


🖥 GitHub 2.6K ⭐️

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Подборка команд Docker

Ловите — самые востребованные команды Docker
Освежите эту важную информацию, чтобы она переместилась в долговременную память)

📎 Полезный сайт с подборкой команд и примерами

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Совет по Go: преднамеренная остановка с помощью функций `Must`

Итак, вот совет, который вначале может показаться контринтуитивным — используйте функцию Must для преднамеренной остановки вашей программы.

Странно, да? И правда, обычно мы стараемся избегать ситуаций, когда наша программа может запаниковать, но есть исключения, когда использование Must сокращает громоздкость.
Если вы работали с Go, по-любому вы уже видели эти функции в стандартной библиотеке.

Чуть подробнее: функция Must принимает как аргумент другую функцию, и если та вернёт ошибку, то Must вызывает панику.

Must в основном используются для:
Задач инициализации, которые не должны завершаться ошибкой в обычных условиях, например, настройка переменных уровня пакета в начале приложения, настройка регулярных выражений, подключение к БД и т.д.
Must также очень полезны в сценариях тестирования, позволяя немедленно прервать тест с помощью t.Fatal: Функции Must являются инструментами для инициализации и тестирования, где мы не ожидаем получить ошибку.

Итак, функция Must упрощает обработку ошибок в определенных контекстах, но следует использовать её осторожно.

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 А ты хорошо знаешь Go? Держи пару полезностей по оптимизации кода

Читать

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Gochat

Это простое приложение для обмена сообщениями, созданное с помощью Go и Vue.js.

Пользователи могут создавать чаты-комнаты для общениеи.

Приложение использует WebSockets для общения в режиме реального времени.

Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Хмм, как преобразовать метку времени UNIX в time.Time в Go

Можно использовать time.Unix():
package main

import (
"fmt"
"time"
)

func main() {
unixTime := time.Unix(1589570165, 0) // 0 - это число наносекунд

fmt.Println(unixTime)
}

// 2020-05-15 22:16:05 +0300 MSK


Также стоит понимать, что многих онлайн-системах метки времени возвращаются с миллисекундами, бывают даже метки времени с микросекундами. Это тоже называют метками времени UNIX. Для них в пакете time предусмотрены специальные функции time.UnixMilli и time.UnixMicro:
package main

import (
"fmt"
"time"
)

func main() {
unixTimeMilli := time.UnixMilli(1589570165123)
unixTimeMicro := time.UnixMicro(1589570165123456)

fmt.Println("millis: ", unixTimeMilli)
fmt.Println("micros: ", unixTimeMicro)
}

// millis: 2020-05-15 19:16:05.123 +0000 UTC
// micros: 2020-05-15 19:16:05.123456 +0000 UTC


Пользуйтесь 👣

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM