37.1K subscribers
1.46K photos
34 videos
5 files
1.62K links
加入频道
✔️ [Golang] Ошибки, которые нельзя обработать

Паника в горутине
Если мы в обработчике будем использовать горутину, которая по каким-то причинам вызвала панику, Golang не сможет обработать эту панику и приложение упадет с ошибкой и все запросы, которые сейчас обрабатывает сервис оборвутся.

Eсли написать примерно вот такой код

type User struct {
Email string
}

func UpsertUser(r *http.Request) (User, error) {
return User{}, nil
}

func SendEmail(u User) {
panic("sending email is not implemented")
}

func CreateUser(w http.ResponseWriter, r *http.Request) {
user, err := UpsertUser(r)

if err != nil {
// handling error
}

go func() {
SendEmail(user)
// may be something else
}()
}


То при вызове функции CreateUser сервис упадет.

Для того, что бы исправить это, нужно обрабатывать паники в каждой горутине

➡️ Читать дальше

@Golang_google
UseStdLibVars: используйте переменные стандартных библиотек

Go-разработчики часто пишут свои собственные переменные или константы, а затем используют их в коде, который обращается к стандартной библиотеке. Поэтому наш Go-разработчик Саша Мелентьев создал линтер usestdlibvars, который определяет, можно ли повторно использовать переменные или константы из стандартной библиотеки, вместо того чтобы создавать собственные.

Например, вы создаете запрос. Он должен использовать какой-то метод, например, getpost, в этом случае многие разработчики так и пишут — get. Но вместо этого вы можете использовать константу из стандартной библиотеки. Вам не придётся писать лишний код, линтер сэкономит ваше время.

К примеру, вместо http.NewRequest("GET", "", nil) можете использовать http.NewRequest(http.MethodGet, "", nil) — линтер это подсветит.

Важно то, что в стандартной библиотеке много различных переменных, которые можно использовать повторно, но они не всегда подходят. Согласно стандарту, в наш линтер включены только две опции (например, проверка, связанная с внутренней библиотекой http), чтобы не было ложных срабатываний.

Название линтера, UseStdLibVars, по сути, является призывом к действию «Используйте переменные стандартных библиотек». Линтер уже включен в golangci-lint.

go install github.com/sashamelentyev/usestdlibvars@latest

➡️ Читать дальше

@Golang_google
English for Developers - канал для тех, кто хочет учить технический английский. От создатателей популярного ит-канала Data analysis.

1. техническая лексика
2. опросы на английском
3. шутки на английском

Подписывайтесь, проходите опросы, читайте полезные прогерские фразы на английском: english_forprogrammers.

1 канал вместо тысячи учебников и курсов
✔️ chi

Подробный гайд по интеграции JWT-аутентификации в приложение на Go + chi с использованием chi jwtauth middleware.

⚙️ Github
🗒 Гайд

@Golang_google
devdash – настраиваемая панель инструментов в терминале для отображения актуальных метрик в одном месте

Ссылка на проект

@Golang_google | #Interesting #Go
💻 Создайте собственный линтер Go за 5 минут

Создание пользовательского линтера может быть отличным способом обеспечить соблюдение стандартов кодинга и обнаружить ошибки в коде. В этом руководстве мы будем использовать Sylver, чтобы создать собственный линтер Golang всего за несколько строк кода.

➡️ Читать дальше

@Golang_google
✔️ Serverless Userpics

🚀 Generate avatars on the fly
🎨 100 avatars included from Craftwork.design (I'm not affiliated with them, just a fan)
🎨 Abstraction over Boring Avatars included as well.
Tiny as fuck.
Serverless. Configurable. Easily deployable.

⚙️ Github

@Golang_google
🖥 Анатомия интерфейсов в Go

В процессе знакомства с Go я нашел в документации пример:

func returnsError() error {
var p *MyError = nil
if bad() {
p = ErrBad
}
return p // Will always return a non-nil error.
}


После его просмотра меня заинтересовало, почему returnsError всегда будет возвращать не non-nil error?

Переменные в Go всегда инициализируются значением. Это относится и к интерфейсам. Стоит отметить, что интерфейсы реализованы в виде двух элементов: тип(T) и значение(V). Это достаточно поверхностное определение, которое чуть дальше мы разберем. Значение интерфейса будет nilтолько в том случае, если Vи T оба будут nil.

Есть интересный момент, а именно случай, когда V=nil, а T!=nil. В таком случае никакие проверки интерфейса на nil нам не помогут. А ведь именно этот сценарий и происходит в returnsError.

Мне стало интересно, как именно эти проверки проходят в Go.

type Word struct {
name string
priority uint
}

type Foo interface {
foo()
}

func (w *Word) foo() {
fmt.Println("call foo()")
}

func (w *Word) noFoo() {
fmt.Println("call noFoo()")
}

func call(f Foo) {
if f != nil {
f.foo()
} else {
fmt.Println("f null")
}
}

func main() {
var f1 *Word
call(f1)
}

➡️ Читать дальше

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Полезнейшая Подборка каналов

👣 Golang
@golang_interview - вопросы и ответы с собеседований по Go. Для всех уровней разработчиков.
@Golang_google - go для разработчиков
@golangtests - тесты и задачи GO
@golangl - чат Golang
@GolangJobsit - вакансии и работа GO
@golang_jobsgo - чат вакансий
@golang_books - книги Golang
@golang_speak - обсуждение задач Go

🖥 Python

@pro_python_code – погружение в python
@python_job_interview – подготовка к Python собеседованию
@python_testit тесты на python
@pythonlbooks - книги Python
@Django_pythonl django
@python_djangojobs - работа Python
@python_django_work

🖥 Machine learning
@ai_machinelearning_big_data – все о машинном обучении
@data_analysis_ml – все о анализе данных.
@machinelearning_ru – машинное обучении на русском от новичка до профессионала.
@machinelearning_interview – подготовка к собеседования Data Science
@datascienceiot – бесплатные книги Machine learning
@ArtificialIntelligencedl – канал о искусственном интеллекте
@neural – все о нейронных сетях
@machinee_learning – чат о машинном обучении
@datascienceml_jobs - работа ds, ml
@Machinelearning_Jobs

🖥 Java
@javatg - Java для програмистов
@javachats Java чат
@java_library - книги Java
@android_its Android разработка
@java_quizes - тесты Java
@Java_workit - работа Java
@progersit - шпаргалки ит

🖥 Javascript / front
@javascriptv - javascript изучение
@about_javascript - javascript продвинутый
@JavaScript_testit -тесты JS
@htmlcssjavas - web
@hashdev - web разработка

🖥 Linux
@linux_kal - чат kali linux
@linuxkalii - linux kali
@linux_read - книги linux


👷‍♂️ IT работа

@hr_itwork - ит-ваканнсии

🖥 SQL
@sqlhub - базы данных
@chat_sql - базы данных чат

🤡It memes
@memes_prog - ит-мемы

⚙️ Rust
@rust_code - язык программирования rust
@rust_chats - чат rust

#️⃣ c# c++
@csharp_ci - c# c++кодинг
@csharp_cplus чат

📓 Книги

@programming_books_it
@datascienceiot
@pythonlbooks
@golang_books
@frontendbooksit
@progersit
@linux_read
@java_library
@frontendbooksit

📢 English for coders

@english_forprogrammers - Английский для программистов

🖥 Github
@github_code
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Gitpodавтоматизация выделения готовых для работы сред разработки

Непрерывно собирает ваши ветки git, такие как CI-сервер, чтобы вы могли начать работу с кодом прямо сейчас - больше не нужно ждать загрузок зависимостей и завершения сборки

↪️ Ссылка на проект

@Golang_google | #Go #Automation
Please open Telegram to view this post
VIEW IN TELEGRAM
Golang fyne Куда нажать? :-(

Fyne - это open-source библиотека для очень простого и быстрого создания кросс-платформенных приложений на Golang

Здесь можно вполне понять для чего нужен fyne, от себя могу сказать, что это очень простая библиотека для пользования, чтобы начать писать на ней программы с графическим интерфейсом не нужно никаких знаний

Можно глянуть одним глазком там довольно медленно и только совсем про базу рассказано, поэтому использовать можно как справочник, когда быстро набрасываешь свой первый интерфейс

↪️ Статья
🖥 Github
⚙️ Видео

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🧑‍💻 Implementing LRU Cache in Go


➡️ Статья
↪️ Что такое LRU кэш

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Как запускать SQL в Go с максимальным комфортом

Писать SQL руками или использовать ORM — тема очень спорная, и я опишу, как использовать первый подход максимально эффективно. А какой из подходов выбрать, думаю, каждый сам для себя уже решил.

Я не буду описывать то, что уже описано в документации, речь пойдёт про использование встроенного пакета для работы с базами данных database/sql и надстройки над этим пакетом под названием sqlx. Также будет пара примеров для работы только с PostgreSQL.

Всё описанное ниже хорошо работает в большом проекте, в котором очень активно используется SQL, когда мест, где запускаются запросы, больше 100, к примеру.

Примеры кода можно посмотреть в репозитории. Этот код я написал специально для статьи, так что, возможно, допустил где-то ошибки. Но он очень похож на то, что используется у нас в проекте.

➡️ Читать дальше
🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Как создать MVP бэкенда

Показываем, какой MVP бэкенда можно разработать для приложения по отслеживанию процессов в компании. В качестве языка использован Go.

Читать: «Как создать MVP бэкенда»

@Golang_google
👣 Bucketeer-io/bucketeer

Платформа для A/B-тестирования

🔩 Github
📝 Документация

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

Симпатичный пакет печати Go (альтернатива fmt), минималистичный, без зависимостей!

go get -u github.com/zakaria-chahboun/cute@latest

🔩 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Fman

Fman быстрый файловый менеджер для терминала, написанный на GO

Имеет чистый интерфейс с подсветкой синтаксиса и поддержкой различных тем

$ go install github.com/nore-dev/fman@latest

🔩 Github

#Interesting #Go #Terminal

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
👣 Полезные библиотеки Go

Ddosify
- очень простой в использовании инструмент для нагрузочного тестирования веб ресурсов.

Поддерживает HTTP, HTTPS, HTTP/2 протоколы.

➡️ GitHub/Инструкция

#go #golang #hack #pentest

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