37.1K subscribers
1.46K photos
34 videos
5 files
1.62K links
加入频道
👣 Что возвращать в Go: структуры или интерфейсы?

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

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

Эксплицитность
Для возвращаемой структуры характерны четкая видимость, доступ к ее полям и методам. Это как подробная схема, на которой раскрываются все нюансы объекта.

Получая прямой доступ к свойствам структуры, мы имеем четкое представление о том, что внутри нее, поэтому работа с данными, манипулирование ими упрощаются.

Рассмотрим пример:

type Person struct {
Name string
Age int
Email string
}

func NewPerson(name string, age int, email string) Person {
return Person{
Name: name,
Age: age,
Email: email,
}
}

func main() {
person := NewPerson("John Doe", 30, "[email protected]")
fmt.Println("Name:", person.Name)
fmt.Println("Age:", person.Age)
fmt.Println("Email:", person.Email)
}

В функции NewPerson возвращается структура Person с информацией о человеке. Возвращая структуру напрямую, мы получаем явный доступ к ее полям Name, Age, Email в вызывном коде.

Благодаря такой эксплицитности необходимые данные легко извлечь и использовать.

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

Благодаря возможности адаптировать ее к конкретным требованиям, код получается чище, целенаправленнее и с точным соответствием задачам приложения.

Продемонстрируем эту гибкость, обновив пример выше:

type Person struct {
Name string
Age int
Email string
}

func (p Person) Greet() {
fmt.Println("Hello, my name is", p.Name)
}

func main() {
person := Person{
Name: "John Doe",
Age: 30,
Email: "[email protected]",
}
person.Greet()
}

В структуру Person добавили метод Greet. Возвращая структуру, мы определяем конкретное поведение прямо в ее типе. В методе Greet приветствие персонализируется полем Name структуры Person.

Благодаря такой гибкости поведения инкапсулируются в самой структуре, а код чище и проще в сопровождении.

📌Читать далее

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
👣 Crafting a Language Server in Golang: A VSCode LSP for Lama2

Lama2 - это менеджер API, ориентированный на работу с текстом и оптимизированный для совместной работы через Git.

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


Статья
Lama2

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Failsafe-go

Failsafe-go - новая библиотека для создания отказоустойчивых приложений на Go. Она работает путем обертывания исполняемой логики одной или несколькими функциями отказоустойчивости, которые можно комбинировать и компоновать по мере необходимости. Функции включают в себя Retry, Circuit Breaker, Rate Limiter, Timeout, Bulkhead и Fallback.

Failsafe-go поможет построить гибкую, простую в использовании реализацию retry и circuit breaker, а также возможность комбинировать их с другими стратегиями отказоустойчивости, что предлагают библиотеки на других языках.

Project
Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Бесплатные курсы: DevOps и Cloud:

Бесплатный онлайн-курс DevOps
https://academiait.ru/course/devops/

Golang бесплатный курс с нуля
https://stepik.org/course/179158/promo

Youtube
https://www.youtube.com/playlist?list=PLysMDSbb9HcxpAb8lhnMaRpX890wSLz66

Linux
http://mygreatlearning.com/academy/learn-for-free/courses/linux-tutorial

Основы программирования для Linux
https://stepik.org/course/548/promo


Основы Linux
https://stepik.org/course/762/promo

Основы Linux
https://stepik.org/course/762/promo

GIT
http://simplilearn.com/learn-git-basics-skillup

DevOps
http://openclassrooms.com/courses/7853556-discover-the-devops-methodology

CI/CD
http://simplilearn.com/free-ci-cd-online-training-course-skillup

Docker
http://cognitiveclass.ai/courses/docker-essentials

Kubernetes
http://simplilearn.com/learn-kubernetes-basics-free-course-skillup

GitHub
http://mygreatlearning.com/academy/learn-for-free/courses/github-tutorial-for-beginners

Cloud Computing
http://cognitiveclass.ai/courses/introduction-to-cloud

AWS
http://openclassrooms.com/courses/7864796-discover-cloud-with-amazon-web-services

Azure
http://mygreatlearning.com/academy/learn-for-free/courses/microsoft-azure-essentials

GCP
http://simplilearn.com/learn-google-cloud-platform-fundamentals-free-course-skillup

Serverless
http://mygreatlearning.com/academy/learn-for-free/courses/serverless-computing

Jenkins
http://mygreatlearning.com/academy/learn-for-free/courses/jenkins-tutorial

Puppet
http://simplilearn.com/free-course-to-learn-puppet-basics-skillup

Chef
http://simplilearn.com/chef-in-devops-basics-free-course-skillup

Ansible
http://simplilearn.com/learn-ansible-basics-free-course-skillup

Selenium
http://mygreatlearning.com/academy/learn-for-free/courses/selenium-basics

VirtualBox & vSphere
http://openclassrooms.com/courses/7163136-set-up-virtual-machines-using-virtualbox-and-vsphere

Специализация Python Scripting for DevOps
https://www.coursera.org/specializations/python-scripting-devops

@Golang_google
👣 WASI support in Go

В Go 1.21 добавлен новый порт, ориентированный на API системных вызовов WASI preview. Этот порт основан на существующем порте WebAssembly, представленном в Go 1.1.

WebAssembly (или Wasm) — это бинарный формат, запускаемый в браузере, виртуальная машина, и результат компиляции с языка высокого уровня.

Wasm это не язык программирования, подобно тому как байт-код Java это не язык программирования, а результат компиляции и запускаемый блок кода.

Кто-то очень умный сказал, что название web assembly (то есть «ассемблер для веба») полностью неправильное, потому что это не ассемблер (не язык программирования) и он никак не связан с вебом (потому что это просто виртуальная машина).

https://go.dev/blog/wasi

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

Hoverfly - это легкий инструмент с открытым исходным кодом для моделирования API, написанный на Go.

С помощью Hoverfly можно создавать реалистичные симуляции работы с API.

git clone https://github.com/SpectoLabs/hoverfly.git

Github

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

Фреймворк на Go, который позволяет легко создавать красивые и функциональные терминальные приложения.

package main

import (
"fmt"
"os"

tea "github.com/charmbracelet/bubbletea"
)

Github
Примеры с кодом
Docs

@Golang_google
👣 Go-hcaptcha

Go-hcaptcha — библиотека, написанная на GO для решения капчи.

Для решения необходим URL сайта (не домена!), а также ключ сайта, который можно найти в HTML-файле сайта с вызовом hCaptcha.

c, err := NewChallenge(siteUrl, siteKey)
if err != nil {
panic(err)
}
err = c.Solve(&GuessSolver{})
if err != nil {
panic(err)
}
fmt.Println(c.Token()) // P0_eyJ0eXAiOiJKV1QiLC...


GitHub

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 go-exploit: Go Exploit Framework

go-exploit - это фреймворк для разработки эксплойтов на языке Go.

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

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

Github
Docs

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ 7 репозиториев GitHub для DevOps специалистов.

1. 𝗞𝘂𝗯𝗲𝗿𝗻𝗲𝘁𝗲𝘀 𝗧𝗵𝗲 𝗛𝗮𝗿𝗱 𝗪𝗮𝘆
Пошаговое руководство по настройке кластеров Kubernetes с нуля, позволяющее получить глубокое представление о внутреннем устройстве Kubernetes.
🔗 https://github.com/kelseyhightower/kubernetes-the-hard-way

2. 𝗗𝗶𝘃𝗲
Dive - это инструмент для изучения образов Docker, помогающий DevOps специалистам анализировать содержимое образов для их дальнейшей оптимизации.
🔗 https://github.com/wagoodman/dive

3. 𝗮𝘄𝗲𝘀𝗼𝗺𝗲-𝗽𝗿𝗼𝗺𝗲𝘁𝗵𝗲𝘂𝘀
Список ресурсов, инструментов и интеграций с Prometheus, популярного инструмента мониторинга , используемого в DevOps.
🔗 https://github.com/roaldnefs/awesome-prometheus

4. 𝗚𝗼𝗥𝗲𝗹𝗲𝗮𝘀𝗲𝗿
Проект, который позволяет легко и быстро создавать deb пакеты.
🔗 https://github.com/goreleaser/goreleaser

5. 𝗗𝗲𝘃𝗢𝗽𝘀 𝗘𝘅𝗲𝗿𝗰𝗶𝘀𝗲𝘀
Предоставляет коллекцию упражнений и задач, связанных с различными DevOps топиками, для практики.
🔗 https://github.com/bregman-arie/devops-exercises

6. 𝗠𝗼𝗹𝗲𝗰𝘂𝗹𝗲
Фреймворк для тестирования кода инфраструктуры с помощью Ansible, помогающий в разработке и проверке ролей и плейбуков.
🔗 https://github.com/ansible/molecule

7. 𝗦𝗢𝗣𝗦
SOPS (Secrets Operator for Kubernetes) упрощает управление безопасностью для Kubernetes.
🔗 https://github.com/mozilla/sops

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Redis-operator

Redis-operator - инструмент , написанный на Go, позволяющий создавать/мониторить работу Redis в автономном и кластерном режиме на базе Kubernetes.

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

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 100Days OfContainers And Orchestration

Опенсорс репозиторий с для изучения контейнеров (Docker, Podman и т.д.) и оркестровки (Kubernetes, ECS и т.д.) от нуля и до профи.

Github

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

Create beautiful applications using Go.

Wails - это библиотека, для создания настольных приложения на Go.

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

Доступны готовые шаблоны для быстрого создания интерфейсов
Унифицированная система обработки событий между Go и Javascript
Мощный инструмент cli для быстрой генерации и создания проектов
Поддерживает многоплатформенность
Доступны собственные диалоговые окна, меню,и
Поддержка темного/светлого режима
Wails использует собственные механизмы рендеринга и не использует встроенные браузеры

go install github.com/wailsapp/wails/v2/cmd/wails@latest

🖥 Github
📕 Документация

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Дайджест полезных материалов из мира Golang за неделю

Почитать:
Статья команды об организации модуля Go
Rust против Go: практическое сравнение
Некоторые советы, которые я почерпнул из книги «100 ошибок в Go»
Golang глазами PHP-программиста
Визуализация исходного кода на языке golang
Реверс бинарных файлов Golang с использование GHIDRA. Часть 2
Golang error updates
Understanding HMAC Authentication for Secure APIs
Control Windows with Your Voice and the Magic of ChatGPT
Go Hacktoberfest Issues
Managing Firecracker microVMs in Go
Build a Serverless Application for entity detection on AWS
Your first API with GO & Nitric
Getting Started with Golang: An Introduction for Beginners
Qual a diferença de usar um receiver com ou sem ponteiro em Go?
Building RESTful API with Hexagonal Architecture in Go

Посмотреть:
🌐 Архитектура проекта на Golang ( 1:45)
🌐 Удаленка на 2 000 000 рублей в месяц ( 09:59)
🌐 Популярная задача с собеседования в Яндекс #python #задача #программирование #собеседование ( 01:00)
🌐 Grinding Leetcode for 24 hours (learning Golang)
🌐 Задача из Собеседования в Яндекс с зарплатой 85000 рублей #python #собеседование #задача #yandex ( 00:59)
🌐 Levenue 2.0 Golang, Svelte And Programming Q&A ( 01:39:35)

Хорошего дня!

@Golang_google
👣 GoReSym

GoReSym - это парсер символов Go, который извлекает метаданные программы (такие как архитектура процессора, ОС, версия компилятора и т.д.) метаданные имени файла, а также встроенные структуры и типы.

Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣Интерфейс подключения к базе данных

При разработке программного обеспечения часто приходится работать с несколькими базами данных, такими как MySQL, PostgreSQL или другими. Управление этими соединениями может быть непростым из-за различий в конфигурациях. Вот один из примеров решения этой проблемы.

Полный код

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