💬 Расскажите о назначении, составляющих, достоинствах и недостатках gRPC.
gRPC (Google Remote Procedure Calling) — система удаленного вызова процедур, разработанная Google. Основное назначение — реализация взаимодействия между микросервисными архитектурами при разработке приложений.
gRPC включает в себя три основных составляющих: стандарт сериализации данных Protocol Buffers (Protobuf), протокол передачи данных HTTP/2 и язык описания интерфейса IDL.
➕ Высокая производительность, бинарный формат хранения данных. Protobuf изначально работает с сериализованными данными, что позволяет эффективно обмениваться информацией по низкоскоростным и слабопроизводительным физическим линиям связи без потерь времени на дополнительные преобразования.
➖ Сложность дебага, ограниченная поддержка браузеров.
gRPC (Google Remote Procedure Calling) — система удаленного вызова процедур, разработанная Google. Основное назначение — реализация взаимодействия между микросервисными архитектурами при разработке приложений.
gRPC включает в себя три основных составляющих: стандарт сериализации данных Protocol Buffers (Protobuf), протокол передачи данных HTTP/2 и язык описания интерфейса IDL.
➕ Высокая производительность, бинарный формат хранения данных. Protobuf изначально работает с сериализованными данными, что позволяет эффективно обмениваться информацией по низкоскоростным и слабопроизводительным физическим линиям связи без потерь времени на дополнительные преобразования.
➖ Сложность дебага, ограниченная поддержка браузеров.
👍7❤4
Forwarded from Библиотека тестировщика | QA, тестирование, quality assurance, manual testing, autotesting, ручное тестирование, автотесты
💻🔍💼 Кризис IT-рынка: как джуны и кадровый голод меняют правила игры
В условиях нехватки опытных специалистов и наплыва джунов, IT-компании вынуждены искать нестандартные подходы к найму. Рассмотрим основные тренды и стратегии адаптации рынка.
Читать статью
#почитать
В условиях нехватки опытных специалистов и наплыва джунов, IT-компании вынуждены искать нестандартные подходы к найму. Рассмотрим основные тренды и стратегии адаптации рынка.
Читать статью
#почитать
🌚4👍1😁1
Вы создаете приложение, которому необходимо выполнять код через определённый промежуток времени или с регулярными интервалами. Какие пакеты будете использовать?
Go предоставляет для этого
• Timers: срабатывают один раз по истечении заданного времени.
• Tickers: запускаются повторно с фиксированными интервалами.
Вот как можно использовать функцию
а вот и
Go предоставляет для этого
time.Timer
и time.Ticker
.• Timers: срабатывают один раз по истечении заданного времени.
• Tickers: запускаются повторно с фиксированными интервалами.
Вот как можно использовать функцию
time.Timer
, чтобы подождать 2 секунды перед выполнением кода:package main
import (
"fmt"
"time"
)
func main() {
timer := time.NewTimer(2 * time.Second)
<-timer.C
fmt.Println("Timer expired!")
}
а вот и
ticker
, который запускается каждую секунду:package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(1 * time.Second)
for t := range ticker.C {
fmt.Println("Tick at", t)
}
}
👍22
Назовите лучшие практики работы с интерфейсами в Go.
1. Маленькие интерфейсы проще реализовывать и мокать.
вместо
2. Использование интерфейсов в параметрах функций для обеспечения гибкости в реализации.
3. Возврат конкретных типов, когда нужно предоставить полный набор функциональности.
4. Использование композиции интерфейсов: создание сложных интерфейсов на основе более простых.
5. Избегание чрезмерного использования интерфейсов: преждевременное введение абстракций может усложнить код и сделать его менее читаемым.
1. Маленькие интерфейсы проще реализовывать и мокать.
type Reader interface {
Read(p []byte) (n int, err error)
}
вместо
type ReadCloser interface {
Read(p []byte) (n int, err error)
Close() error
}
2. Использование интерфейсов в параметрах функций для обеспечения гибкости в реализации.
func CopyData(r Reader, w Writer) error {
buf := make([]byte, 1024)
for {
n, err := r.Read(buf)
if err != nil {
return err
}
if n == 0 {
break
}
if _, err := w.Write(buf[:n]); err != nil {
return err
}
}
return nil
}
3. Возврат конкретных типов, когда нужно предоставить полный набор функциональности.
func NewBuffer() *bytes.Buffer {
return &bytes.Buffer{}
}
4. Использование композиции интерфейсов: создание сложных интерфейсов на основе более простых.
type ReadCloser interface {
Reader
Closer
}
5. Избегание чрезмерного использования интерфейсов: преждевременное введение абстракций может усложнить код и сделать его менее читаемым.
👍19🤔2
Forwarded from Библиотека Go-разработчика | Golang
📉👩💻 Руководство по сборщику мусора Go
Одна из тех самых страниц документации, которая должна быть под рукой у Go-разраба. В ней есть все о том, как работает система сборки мусора Go, с дополненным полезными интерактивными диаграммами.
👉 Читать
Одна из тех самых страниц документации, которая должна быть под рукой у Go-разраба. В ней есть все о том, как работает система сборки мусора Go, с дополненным полезными интерактивными диаграммами.
👉 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍2👏1
💬 Можно ли реализовать set на Go?
Set — это структура данных, которая хранит уникальные элементы и позволяет быстро проверять их наличие, добавлять и удалять их, без дубликатов. В Go нет встроенного типа для множеств, но мы можем использовать тип map с ключами нужного типа, а в качестве значения использовать
Основные операции с множествами:
- Union: создаёт множество, содержащее все элементы из двух множеств.
- Intersection: возвращает множество с элементами, общими для двух множеств.
- Difference: возвращает множество элементов, которые есть в первом множестве, но отсутствуют во втором.
Пример:
Производительность: все основные операции с помощью множеств (добавление, удаление, проверка) выполняются за время O(1) благодаря использованию мапы.
Set — это структура данных, которая хранит уникальные элементы и позволяет быстро проверять их наличие, добавлять и удалять их, без дубликатов. В Go нет встроенного типа для множеств, но мы можем использовать тип map с ключами нужного типа, а в качестве значения использовать
struct{}
, который не занимает память:package main
import "fmt"
// Set — коллекция уникальных элементов
type Set struct {
elements map[string]struct{}
}
// NewSet создает новое множество
func NewSet() *Set {
return &Set{elements: make(map[string]struct{})}
}
// Add добавляет элемент
func (s *Set) Add(value string) {
s.elements[value] = struct{}{}
}
// Remove удаляет элемент
func (s *Set) Remove(value string) {
delete(s.elements, value)
}
// Contains проверяет наличие элемента
func (s *Set) Contains(value string) bool {
_, found := s.elements[value]
return found
}
// List возвращает все элементы в виде среза
func (s *Set) List() []string {
keys := make([]string, 0, len(s.elements))
for key := range s.elements {
keys = append(keys, key)
}
return keys
}
// Пример использования множества
func main() {
set := NewSet()
set.Add("apple")
set.Add("banana")
fmt.Println("Contains 'apple':", set.Contains("apple"))
fmt.Println("Set elements:", set.List())
set.Remove("banana")
fmt.Println("Set after removal:", set.List())
}
Основные операции с множествами:
- Union: создаёт множество, содержащее все элементы из двух множеств.
- Intersection: возвращает множество с элементами, общими для двух множеств.
- Difference: возвращает множество элементов, которые есть в первом множестве, но отсутствуют во втором.
Пример:
set1 := NewSet()
set1.Add("apple")
set1.Add("banana")
set2 := NewSet()
set2.Add("banana")
set2.Add("orange")
unionSet := set1.Union(set2)
fmt.Println("Union:", unionSet.List()) // ["apple", "banana", "orange"]
Производительность: все основные операции с помощью множеств (добавление, удаление, проверка) выполняются за время O(1) благодаря использованию мапы.
1👍15🥱5😁3
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Forwarded from Библиотека Go-разработчика | Golang
Кстати, на Хабре опубликован перевод гайда про транзакции в БД на Go с использованием многослойной архитектуры 👉 https://www.tgoop.com/goproglib/5276
Читайте, если хотите узнать об организации кода таким образом, чтобы избежать путаницы между слоями.
Читайте, если хотите узнать об организации кода таким образом, чтобы избежать путаницы между слоями.
Telegram
Библиотека Go разработчика | Golang
🔥 Распределенные транзакции в Go: прочтите, прежде чем попробовать
В микросервисной архитектуре иногда возникает необходимость в транзакциях, которые должны охватывать несколько сервисов. Это приводит к проблемам, когда проблема на одном из этапов оставляет…
В микросервисной архитектуре иногда возникает необходимость в транзакциях, которые должны охватывать несколько сервисов. Это приводит к проблемам, когда проблема на одном из этапов оставляет…
👍8
💬 Что такое JWT аутентификация и где она используется?
JWT (JSON Web Token) аутентификация — это способ передачи и проверки данных между сторонами в закодированном формате JSON. Токен состоит из трех частей: заголовка, claims и подписи, что делает его безопасным для передачи информации, так как данные могут быть проверены на подлинность, но не зашифрованы.
📌 Где используется:
JWT часто используется для:
1. Аутентификации — после успешного логина пользователю выдается JWT-токен, который прикрепляется к каждому последующему запросу для доступа к защищенным ресурсам.
2. Авторизации — токен может содержать информацию о правах доступа пользователя.
📌 Преимущества:
🔸 Позволяет безопасно передавать данные между клиентом и сервером.
🔸 JWT самодостаточен — не требует постоянной проверки на сервере, так как содержит всю необходимую информацию в себе.
🔸 Широко используется в REST API для аутентификации.
JWT (JSON Web Token) аутентификация — это способ передачи и проверки данных между сторонами в закодированном формате JSON. Токен состоит из трех частей: заголовка, claims и подписи, что делает его безопасным для передачи информации, так как данные могут быть проверены на подлинность, но не зашифрованы.
📌 Где используется:
JWT часто используется для:
1. Аутентификации — после успешного логина пользователю выдается JWT-токен, который прикрепляется к каждому последующему запросу для доступа к защищенным ресурсам.
2. Авторизации — токен может содержать информацию о правах доступа пользователя.
📌 Преимущества:
🔸 Позволяет безопасно передавать данные между клиентом и сервером.
🔸 JWT самодостаточен — не требует постоянной проверки на сервере, так как содержит всю необходимую информацию в себе.
🔸 Широко используется в REST API для аутентификации.
👍8❤1
Опрос «Как вы учитесь с помощью телефона: поделитесь своим опытом!»
Мы хотим стать ещё круче, и для этого нужно узнать, как вы учитесь!
Заполните мини-анкету о том, как вы используете мобильные приложения для прокачки знаний.
⏳ Займёт всего 5 минут — как раз успеете за чашкой кофе! А за ваш ценный вклад мы дарим 15% скидку на все курсы https://proglib.academy/ 🎁
Дорогие подписчики, мы на миссии улучшений, и вы — наш ключ! 🔑
Мы хотим стать ещё круче, и для этого нужно узнать, как вы учитесь!
Заполните мини-анкету о том, как вы используете мобильные приложения для прокачки знаний.
⏳ Займёт всего 5 минут — как раз успеете за чашкой кофе! А за ваш ценный вклад мы дарим 15% скидку на все курсы https://proglib.academy/ 🎁
Спикер: Иван Потапов – Staff Machine Learning Engineer at ShareChat. Руководит командой, отвечающей за качество рекомендаций, и имеет 8-летний опыт в сфере машинного обучения.
– Теорию вероятностей: случайные величины, математическое ожидание и дисперсию.
– Линейную алгебру: векторы, матрицы, собственные векторы и собственные значения.
– Математический анализ: производные и разложение функций в ряд Тейлора.
Понимание математических основ помогает глубже разобраться в работающих под капотом алгоритмах ML/DL и эффективно применять их на практике.
Присоединяйтесь к нам и совершенствуйте свои навыки в машинном обучении!
📌 Регистрация по ссылке: https://proglib.io/w/71ad9706
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Forwarded from Библиотека девопса | DevOps, SRE, Sysadmin
🎭 Двойная игра в Power BI: как совмещать роли разработчика и администратора
Когда твой руководитель говорит: «А теперь ты еще и администратор сервера Power BI». Гид по выживанию для разработчика, внезапно ставшего многостаночником.
Читать статью
Когда твой руководитель говорит: «А теперь ты еще и администратор сервера Power BI». Гид по выживанию для разработчика, внезапно ставшего многостаночником.
Читать статью
💬 Объясните назначение основных методов sync.Map в Go.
• Load, Store, Delete, Clear — это базовые операции, работающие так же, как методы обычной мапы в Go.
• Swap заменяет старое значение новым и возвращает предыдущее значение. Этот метод также используется внутри
• LoadOrStore проверяет наличие ключа. Если ключ существует, метод возвращает текущее значение и
• LoadAndDelete пытается загрузить значение по ключу. Если ключ существует, он удаляет его и возвращает значение, при этом
• CompareAndDelete и CompareAndSwap — это условные операции. Эти методы удаляют или заменяют значение, только если текущее значение ключа соответствует старому. Если сравнение прошло успешно, ключ удаляется или обновляется, и метод возвращает
• Range(f) позволяет итерировать по мапе, применяя функцию
Все эти методы являются атомарными, но у Range есть особенность: мапа не блокируется на всё время итерации, что позволяет другим горутинам добавлять, изменять или удалять записи во время выполнения цикла.
sync.Map
в Go предоставляет набор атомарных методов для работы с мапой, поддерживающих конкурентный доступ: • Load, Store, Delete, Clear — это базовые операции, работающие так же, как методы обычной мапы в Go.
• Swap заменяет старое значение новым и возвращает предыдущее значение. Этот метод также используется внутри
Store().
• LoadOrStore проверяет наличие ключа. Если ключ существует, метод возвращает текущее значение и
loaded
будет равно true.
Если ключа нет, он сохраняет новое значение и возвращает его, при этом loaded
будет равно false.
• LoadAndDelete пытается загрузить значение по ключу. Если ключ существует, он удаляет его и возвращает значение, при этом
loaded
будет true.
Если ключ не найден, возвращается false.
• CompareAndDelete и CompareAndSwap — это условные операции. Эти методы удаляют или заменяют значение, только если текущее значение ключа соответствует старому. Если сравнение прошло успешно, ключ удаляется или обновляется, и метод возвращает
true,
иначе — false.
• Range(f) позволяет итерировать по мапе, применяя функцию
f
к каждой паре ключ-значение. Если функция возвращает false,
итерация прекращается (аналогично break
в цикле for
). Все эти методы являются атомарными, но у Range есть особенность: мапа не блокируется на всё время итерации, что позволяет другим горутинам добавлять, изменять или удалять записи во время выполнения цикла.
👍5🌚1
Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования
🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования
🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
💬 Для чего предназначена директория internal в проекте на Go?
Директория
➕ Преимущества:
▪️Инкапсуляция: мы сигнализируем, что код внутри
▪️Безопасность: Go автоматически запрещает импортировать код из директории
▪️Гибкость в рефакторинге: мы можем свободно изменять код и API внутри
➖ Недостатки (особенности):
▪️Мы не можем импортировать код из
👉 Подробнее
Директория
internal
в Go — это специальная структура проекта, которая делает код, находящийся внутри неё, доступным только для внутреннего использования в текущем модуле или его подмодулях. Она служит для того, чтобы скрыть детали реализации и предотвратить случайное или преднамеренное использование этого кода другими модулями или внешними проектами.➕ Преимущества:
▪️Инкапсуляция: мы сигнализируем, что код внутри
internal
является «частным» и не предназначен для использования другими модулями.▪️Безопасность: Go автоматически запрещает импортировать код из директории
internal
, даже если кто-то захочет это сделать.▪️Гибкость в рефакторинге: мы можем свободно изменять код и API внутри
internal
, не беспокоясь о том, что сломаем зависимости внешних пользователей.➖ Недостатки (особенности):
▪️Мы не можем импортировать код из
internal
, даже если позже это потребуется. Это может вызвать путаницу для новичков, которые не знают этой особенности.👉 Подробнее
go.dev
Organizing a Go module - The Go Programming Language
👍7🌚2❤1🥰1
💬 Для чего предназначен пакет flag в Go?
Пакет flag предоставляет возможность считывать аргументы командной строки (или флаги). Он поддерживает считывание различных типов данных, включая строки, целые числа и логические значения, что делает его универсальным для различных видов приложений.
Простой пример:
👉 Подробнее
Пакет flag предоставляет возможность считывать аргументы командной строки (или флаги). Он поддерживает считывание различных типов данных, включая строки, целые числа и логические значения, что делает его универсальным для различных видов приложений.
Простой пример:
package main
import (
"flag"
"fmt"
)
func main() {
name := flag.String("name", "Worl "a name to say hello to")
flag.Parse()
fmt.Printf("Hello, %s!\n", *name)
}
go run main.go -name=Gopher
Hello, Gopher!
👉 Подробнее
Bytesizego
A Comprehensive Guide to the Flag Package
Reading command line arguments is a common use case for both CLI and API applications - Go makes this very easy to do using just the standard library via the flag package. Let's see how.
👍8❤1
Forwarded from Библиотека Go-разработчика | Golang
📹 Секреты внутреннего устройства аллокатора Go: видеогайд от Владимира Балуна
⏱️ Таймкоды:
00:00 Введение
01:49 Концепция аллокатора
06:09 Линейный аллокатор
11:22 Блочный аллокатор
16:21 Стековый аллокатор
20:18 Устройство malloc
25:01 Недостатки malloc
26:55 Устройство tcmalloc
28:28 Устройство аллокатора Go
32:55 Предсказуемая фрагментация памяти
40:33 Где аллоцируются объекты в Go
51:11 Почему аллокация на стеке работает быстрее, чем в куче
52:35 Расширение и уменьшение стека в Go
58:12 Зачем это все нужно знать (практические примеры)
01:03:37 Пулы объектов (sync.Pool)
01:06:57 Арены (memory arenas)
01:14:30 Аллокатор ОС
▶️ YouTube | Rutube | VK
⏱️ Таймкоды:
00:00 Введение
01:49 Концепция аллокатора
06:09 Линейный аллокатор
11:22 Блочный аллокатор
16:21 Стековый аллокатор
20:18 Устройство malloc
25:01 Недостатки malloc
26:55 Устройство tcmalloc
28:28 Устройство аллокатора Go
32:55 Предсказуемая фрагментация памяти
40:33 Где аллоцируются объекты в Go
51:11 Почему аллокация на стеке работает быстрее, чем в куче
52:35 Расширение и уменьшение стека в Go
58:12 Зачем это все нужно знать (практические примеры)
01:03:37 Пулы объектов (sync.Pool)
01:06:57 Арены (memory arenas)
01:14:30 Аллокатор ОС
▶️ YouTube | Rutube | VK
👍3🔥1
💬 В Go существует возможность скрывать методы с помощью встраивания структур. Как можно сделать так, чтобы метод, реализующий интерфейс, был скрыт при приведении типа, даже если он присутствует у встраиваемой структуры?
Например, есть тип
Теперь, допустим, мы хотим использовать тип
Когда мы вызываем
Хотя
Например, есть тип
A
, который имеет метод Hello()
. Когда мы передаём экземпляр A
в функцию Greet()
, приведение успешно выполнится к интерфейсу Greeter
, и будет вызван метод Hello()
.Теперь, допустим, мы хотим использовать тип
A
, но не хотим, чтобы его метод Hello()
был доступен. Мы можем скрыть его с помощью embedding.Когда мы вызываем
Greet(ANoHello{A: A{}})
, приведение типа к интерфейсу не удаётся.Хотя
ANoHello
встраивает тип A
, который имеет корректный метод Hello()
, приоритет получает неэкспортируемый тип noHello
, который скрывает метод Hello()
.🤔8👍3❤1😁1
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
❤1👍1