Forwarded from Библиотека Go-разработчика | Golang
Кстати, на Хабре опубликован перевод гайда про транзакции в БД на Go с использованием многослойной архитектуры 👉 https://t.me/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
Когда в Go следует использовать псевдонимы типов?
Type aliases — полезный инструмент, но их следует использовать с осторожностью. Вот несколько распространённых сценариев, в которых они могут быть особенно полезны:
🔸 Взаимодействие со сторонними библиотеками. Сторонние библиотеки часто используют сложные или неинтуитивно понятные имена типов. В таких случаях можно создать псевдоним типа, чтобы упростить работу с типами.
🔸 Повышение удобочитаемости кода для конкретной предметной области. Если проект включает в себя модели предметной области или бизнес-логику, псевдонимы типов могут повысить читаемость.
🔸 Упрощение дженериков (Go 1.18+)
В Go 1.18 появились дженерики, которые позволяют функциям работать с любым типом данных. Псевдонимы типов могут упростить использование дженериков в сигнатурах функций.
Type aliases — полезный инструмент, но их следует использовать с осторожностью. Вот несколько распространённых сценариев, в которых они могут быть особенно полезны:
🔸 Взаимодействие со сторонними библиотеками. Сторонние библиотеки часто используют сложные или неинтуитивно понятные имена типов. В таких случаях можно создать псевдоним типа, чтобы упростить работу с типами.
type JSONResponse = map[string]interface{}
🔸 Повышение удобочитаемости кода для конкретной предметной области. Если проект включает в себя модели предметной области или бизнес-логику, псевдонимы типов могут повысить читаемость.
type OrderID = string
type PaymentStatus = string
const (
Pending PaymentStatus = "pending"
Completed PaymentStatus = "completed"
Failed PaymentStatus = "failed"
)
🔸 Упрощение дженериков (Go 1.18+)
В Go 1.18 появились дженерики, которые позволяют функциям работать с любым типом данных. Псевдонимы типов могут упростить использование дженериков в сигнатурах функций.
type List[T any] = []T
func printList[T any](list List[T]) {
for _, item := range list {
fmt.Println(item)
}
}
👍12❤2
Forwarded from Библиотека нейросетей | ChatGPT, Midjourney, DeepSeek, Sora
⚡️Разыгрываем флагманский смартфон
«Библиотека программиста» разыгрывает один из трех смартфонов на выбор:
🔹Samsung Galaxy S24 Ultra на 1 ТБ
🔹Xiaomi 14 Ultra на 512 ГБ
🔹iPhone 16 Pro Max на 512 ГБ
🔥 А еще 99 участников розыгрыша получат скидку 50% на наш курс Базовые модели ML и приложения!
Промокод будет действителен до 20 ноября.
Условия просты:
→ подписаться на Библиотека нейротекста
→ подписаться на Библиотека нейрозвука
→ подписаться на Библиотека нейрокартинок
→ нажать на кнопку «Участвовать» под этим постом
Итоги появятся 30 октября в 20:00 по московскому времени в нашем канале Библиотека программиста. Затем мы свяжемся с победителем, который сам выберет смартфон. Тем, кто получит промокод, мы вышлем его в течение недели после окончания розыгрыша.
⚠️ Убедитесь, что вам можно написать в личные сообщения или следите за результатами — если мы не сможем с вами связаться, то не сможем и отправить приз. Доставить мы можем только в города России и Беларуси.
«Библиотека программиста» разыгрывает один из трех смартфонов на выбор:
🔹Samsung Galaxy S24 Ultra на 1 ТБ
🔹Xiaomi 14 Ultra на 512 ГБ
🔹iPhone 16 Pro Max на 512 ГБ
🔥 А еще 99 участников розыгрыша получат скидку 50% на наш курс Базовые модели ML и приложения!
Промокод будет действителен до 20 ноября.
Условия просты:
→ подписаться на Библиотека нейротекста
→ подписаться на Библиотека нейрозвука
→ подписаться на Библиотека нейрокартинок
→ нажать на кнопку «Участвовать» под этим постом
Итоги появятся 30 октября в 20:00 по московскому времени в нашем канале Библиотека программиста. Затем мы свяжемся с победителем, который сам выберет смартфон. Тем, кто получит промокод, мы вышлем его в течение недели после окончания розыгрыша.
⚠️ Убедитесь, что вам можно написать в личные сообщения или следите за результатами — если мы не сможем с вами связаться, то не сможем и отправить приз. Доставить мы можем только в города России и Беларуси.
💬 Для чего предназначен интерфейс
Когда мы открываем файл, буфер или сетевой поток, по умолчанию чтение или запись данных происходит последовательно, начиная с начала и продвигаясь вперёд. Но иногда нужно больше контроля, например, перескочить к конкретному месту в файле или вернуться назад и что-то перечитать.
Для этого существует интерфейс
Его функция принимает два аргумента:
• os.SeekStart: перемещает курсор относительно начала файла.
• os.SeekCurrent: перемещает курсор относительно его текущего положения.
• os.SeekEnd: перемещает курсор относительно конца файла, чаще всего с отрицательным смещением.
io.Seeker
?Когда мы открываем файл, буфер или сетевой поток, по умолчанию чтение или запись данных происходит последовательно, начиная с начала и продвигаясь вперёд. Но иногда нужно больше контроля, например, перескочить к конкретному месту в файле или вернуться назад и что-то перечитать.
Для этого существует интерфейс
io.Seeker.
Он позволяет перемещать указатель файла на другую позицию в файле, чтобы можно было начать чтение или запись с нужного места. Его функция принимает два аргумента:
offset,
который указывает, насколько нужно сместить курсор, и whence,
который задаёт точку отсчёта: • os.SeekStart: перемещает курсор относительно начала файла.
• os.SeekCurrent: перемещает курсор относительно его текущего положения.
• os.SeekEnd: перемещает курсор относительно конца файла, чаще всего с отрицательным смещением.
👍13
Forwarded from Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
🧪 Чем заменить Postman: 5 отличных инструментов для разработки API
Postman долгое время был основным инструментом для разработки и тестирования API, но сейчас для большинства разработчиков его ограничения стали перевешивать преимущества. Рассмотрим альтернативные инструменты, которые могут предложить больше возможностей, чем Postman — даже в бесплатной версии.
👉Читаем здесь
Postman долгое время был основным инструментом для разработки и тестирования API, но сейчас для большинства разработчиков его ограничения стали перевешивать преимущества. Рассмотрим альтернативные инструменты, которые могут предложить больше возможностей, чем Postman — даже в бесплатной версии.
👉Читаем здесь
🥱3👍2
💬 Можно ли в Go преобразовывать срезы в массивы или указатели на массивы?
Такая возможность была добавлена в Go 1.20. Когда нужно преобразовать срез в массив фиксированного размера, нельзя сделать это напрямую, как показано ниже:
Чтобы преобразовать срез в массив, команда Go обновила эту функцию в Go 1.17. А с выпуском Go 1.20 процесс преобразования стал ещё проще и удобнее с помощью новых литералов:
P. S.: можно использовать
Такая возможность была добавлена в Go 1.20. Когда нужно преобразовать срез в массив фиксированного размера, нельзя сделать это напрямую, как показано ниже:
a := []int{0, 1, 2, 3, 4, 5}
var b[3]int = a[0:3]
// cannot use a[0:3] (value of type []int) as [3]int value in variable
// declaration compiler(IncompatibleAssign)
Чтобы преобразовать срез в массив, команда Go обновила эту функцию в Go 1.17. А с выпуском Go 1.20 процесс преобразования стал ещё проще и удобнее с помощью новых литералов:
// Go 1.20
func main() {
a := []int{0, 1, 2, 3, 4, 5}
b := [3]int(a[0:3])
fmt.Println(b) // [0 1 2]
}
// Go 1.17
func main() {
a := []int{0, 1, 2, 3, 4, 5}
b := *(*[3]int)(a[0:3])
fmt.Println(b) // [0 1 2]
}
P. S.: можно использовать
a[:3]
вместо a[0:3]
.❤15👍11⚡2
🤔 Нужна ли математика на собеседованиях?
🗓 Сегодня в 20:00 встречаемся в прямом эфире, чтобы обсудим роль математики на собеседовании, а также поделимся инсайдами как успешно пройти техническое собеседование! https://proglib.io/w/a1fe2494
🌟 Спикер: Станислав Петров – Senior Data Scientist.
😮 На вебинаре вы узнаете:
😱 Ошибаться — не страшно. Как ошибки и неудачные проекты могут стать ценным опытом. Почему «проекты в стол» способствуют профессиональному росту. И как преодолеть путь от junior до senior.
🙌🏻 Собеседования: можно ли к ним не готовиться?! Поделимся эффективными стратегиями подготовки и расскажем, на что работодатели обращают внимание в первую очередь.
✍️ Разберем реальные тестовые задачи, которые дают на собеседованиях на позицию Data Scientist.
🎁 Бонус: расскажем как проводить эффективное тестирование в маркетинге и их масштабируемость.
🎯 Почему важно посетить вебинар?
• Понимание математических концепций и их применение помогает успешно проходить собеседования и решать реальные задачи.
• Расширьте свой профессиональный кругозор и подготовьтесь к новым карьерным вызовам.
👉 Присоединяйтесь к нам и узнайте, как математика может помочь в вашей карьере https://proglib.io/w/a1fe2494
🗓 Сегодня в 20:00 встречаемся в прямом эфире, чтобы обсудим роль математики на собеседовании, а также поделимся инсайдами как успешно пройти техническое собеседование! https://proglib.io/w/a1fe2494
🌟 Спикер: Станислав Петров – Senior Data Scientist.
😮 На вебинаре вы узнаете:
😱 Ошибаться — не страшно. Как ошибки и неудачные проекты могут стать ценным опытом. Почему «проекты в стол» способствуют профессиональному росту. И как преодолеть путь от junior до senior.
🙌🏻 Собеседования: можно ли к ним не готовиться?! Поделимся эффективными стратегиями подготовки и расскажем, на что работодатели обращают внимание в первую очередь.
✍️ Разберем реальные тестовые задачи, которые дают на собеседованиях на позицию Data Scientist.
🎁 Бонус: расскажем как проводить эффективное тестирование в маркетинге и их масштабируемость.
🎯 Почему важно посетить вебинар?
• Понимание математических концепций и их применение помогает успешно проходить собеседования и решать реальные задачи.
• Расширьте свой профессиональный кругозор и подготовьтесь к новым карьерным вызовам.
👉 Присоединяйтесь к нам и узнайте, как математика может помочь в вашей карьере https://proglib.io/w/a1fe2494
🔥1
Forwarded from Библиотека Go-разработчика | Golang
🔥 Phuong Le представил очередную занимательную серию статей про I/O в Go:
▪️ Go I/O Readers, Writers и Data
▪️ Go I/O Closer, Seeker, WriterTo и ReaderFrom
▪️ Go I/O Readers, Writers и Data
▪️ Go I/O Closer, Seeker, WriterTo и ReaderFrom
👍2