37.1K subscribers
1.46K photos
34 videos
5 files
1.62K links
加入频道
👣 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
👣 Сверхполезный сайт со всей теорией по Go

🔥 На днях наткнулся на нереально полезный онлайн учебник по Go, чем и спешу поделиться.
Здесь описывается абсолютно всё, что поможет подготовиться к собеседованию, и даже больше

Вопросы с собеседований связанные с Golang
├── Общие вопросы
├── Хеш-мапы
├── Интерфейсы
├── Пакеты
├── Типы данных
├── Defer
├── Примитивы синхронизации
├── Планировщик
├── Строки
├── Массивы и слайсы
├── Дженерики
├── Горутины
├── Конструкции
├── Гонка данных
├── Структуры
├── Контекст
├── Ошибки / Panic
└── Указатели

Вопросы с собеседований связанные с Linux
├── Файловая система
└── Сигналы, процессы

Вопросы по инфраструктуре
└── Базы данных (реляционные)

🖥 GitHub

📎 Учебник

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Полезные советы по написанию тестов в Go

Сперва давайте немного о тестах в Go.
Базовый пакет для работы с тестами — это testing. Два основных типа здесь — T для обычных юнит-тестов и B для нагрузочных тестов. Тесты в Go пишутся в том же пакете, что и основная программа, с добавлением суффикса _test. Поэтому любые приватные структуры данных, доступные внутри пакета, доступны и внутри тестов (так же верно, что тесты имеют общую глобальную область видимости между собой. При компиляции основной программы тестовые файлы игнорируются.

Помимо базового пакета testing, существует большое количество сторонних библиотек, помогающих упростить написание тестов либо позволяющих писать в том или ином стиле (даже в стиле BDD. Вот, например, хорошая вводная статья о том, как писать на Go в стиле TDD.

На GitHub есть табличка сравнения тестовых библиотек, среди которых есть такие монстры, как goconvey, предоставляющий ещё и веб-интерфейс, и взаимодействие с системой, например уведомления о прохождении тестов. Чтобы не усложнять, для простых проектов можно использовать небольшую библиотеку testify, добавляющую лишь немного примитивов для проверки условий и создания mock-объектов.

А вот и примеры разных тестов, держите)

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