Использование Docker не обязательно должно быть принципом «все или ничего». Вы можете использовать Docker для развертывания и создания образов для продакшн, но вам не обязательно использовать его в разработке.
Каждая инструкция в вашем Dockerfile приводит к созданию слоя изображения. Docker использует слои для повторного использования работы. Слои кэшируются и их не нужно пересобирать, если:
— Все предыдущие слои не изменяются.
— В случае инструкции
COPY
: файлы/папки не изменяются.— В случае всех остальных инструкций: текст команды не изменяется.
Представьте, что у нас есть следующий фрагмент Dockerfile:
RUN mkdir /code
COPY code code/
RUN pip install code/requirements.txt
Каждый раз, когда что-либо в каталоге кода меняется, вторую строку необходимо запускать заново, а также каждую последующую строку.
Вот как мы могли бы избежать повторного запуска этапа установки при каждом изменении кода:
RUN mkdir /code
COPY code/requirements.txt code/
RUN pip install code/requirements.txt
COPY code /code
Во-первых, проверьте, не загружаете ли вы зависимости разработки, которые вообще не нужны вашему образу.
Ещё нужно помнить про поведение менеджера пакетов на уровне ОС. Например, `apt`который используется в Ubuntu и Debian, по умолчанию устанавливает «рекомендуемые» пакеты.
Вы можете избежать этого, добавив к
apt-get install
флаг --no-install-recommends
BuildKit — это новый механизм сборки образов, который можно использовать вместо стандартного Docker. С ним вы получаете больше параллелизма и эффективности кэширования, плюс новые интересные функции
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍14❤6
std::flush
и std::endl
, который ещё и переносит на новую строку. Есть ли такое в Go?Практически все операции вывода в Go используют интерфейсы
io.Writer
или io.WriteCloser
. В этих интерфейсах есть только метод Write
. Эти интерфейсы радикально проще стандартного std::basic_stream
. Метод Flush
или аналоги в io.Writer
отсутствуют.Теперь об объектах
std::cin
и std::cout
. В Go им соответствуют os.Stdin
и os.Stdout
. Переменная os.Stdout
— это указатель на объект типа os.File
.В Go вывод в файлы не буферизуется, метод
File.Write
пишет напрямую в файловый дескриптор через системный вызов pwrite
. Соответственно, в типе File
нет метода, аналогичного std::Flush
. Есть метод Sync
, который вызывает системный вызов fsync
для открытого файлового дескриптора, но это не то. Этот системный вызов заставляет ядро сбросить на диск буферы, отведённые под файловый дескриптор.Из-за того, что
File
пишет напрямую в файл, функции fmt.Print
и fmt.Println
, а так же методы File.WriteString
и File.Write
, очень медленные. На больших объемах вывода они медленнее буферизованного вывода раз в 100.Буферизованный ввод-вывод предоставляет пакет
bufio
. В пакете определён тип bufio.Writer
, в котором есть метод Flush
. Этот тип в десятки раз ускоряет вывод, но, к сожалению, нет типа для буферизованного файла: нельзя написать os.Stdout = bufio.NewWriter(os.Stdout)
. Поэтому если вам нужен быстрый аналог fmt.Print
, то нужно пользоваться fmt.Fprint
и явно указывать writer
:Stdout_Buffered := bufio.NewWriter(os.Stdout)
...
fmt.Fprintln(Stdout_Buffered, "Hello, world!")
...
Stdout_Buffered.Flush()
Аналога для
std::endl
в стандартных пакетах Go нет. Функция
fmt.Fprintln
пишет в объект io.Writer
системно-зависимый конец строки, но, поскольку io.Writer
не содержит никаких аналогов flush
, нижележащий буфер (если есть) эта функция не синхронизует.@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍47❤6🔥4😁1
Итак, вот навскидку несколько областей применения
gorilla/context
: А вообще, применений
gorilla/context
уйма, можно почитать тут:@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🤬14👍9❤2🔥2😢1
Вот некоторые темы, которые обсуждаются:
— Dependency Injection
— Буферизированный-небуферизированный канал
— Термины, указатели,
interface{}
— Множества (sets), кортежи (tuples), функции-генераторы
— Указательные типы данных
Помимо этого обсуждаются алгоритмы, асимптотическая сложность, методы решения задач и всё в таком духе
Пользуйтесь)
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33🔥11❤4
skopeo не требует запуска демона для выполнения своих операций.
Инструмент может работать как с образами OCI, так и с оригинальными образами Docker v2.
▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19❤5🔥3
Держите полезные рекомендации по ведению кода на Go.
Думаю, эти рекомендации довольно неплохо пригодятся и разрабам вне Uber.
Эти правила необходимы для того, чтобы сохранить контроль над кодовой базой проекта и при этом эффективно использовать возможности Go.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍36🔥15❤3
Встречайте годный контент)
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥3❤2
Local Coding Equals Global Production
Инструмент на Go, который переводит облачную инфраструктуру в режим автономной работы, плавно соединяя локальную разработку и облачные технологии.
Работа происходит автоматически, в режиме реального времени, это гарантирует постоянную оптимизацию ваших систем без сбоев.
▪Github
▪Docs
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥4❤3🥰2
Полезный контент
Это коллекция из 22 популярных паттернов проектирования с примерами кода на языке Go и кратким описанием паттерна.
В кратких описаниях будут употребляться классические термины, такие как Класс, Объект, Абстрактный Класс. Применимо к языку Go, это Тип, Значение этого типа и Интерфейс (где это возможно).
Умение правильно использовать шаблоны проектирования, так сказать, в нужном месте и в нужное время, помогут сохранить ваши нервные клетки, используйте эти ссылки
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51❤6🔥5🤬2
🎊 Выпущены версии 1.22.2 и 1.21.9!
🔐 Безопасность: исправлена ошибка CVE-2023-45288
📢 Анонс: https://groups.google.com/g/golang-announce/c/YgW0sx8mN3M
📦 Скачать: https://go.dev/dl/#go1.22.2
@Golang_google
🔐 Безопасность: исправлена ошибка CVE-2023-45288
📢 Анонс: https://groups.google.com/g/golang-announce/c/YgW0sx8mN3M
📦 Скачать: https://go.dev/dl/#go1.22.2
@Golang_google
👍16🔥9🥰3
🔥 Hypert - это библиотека Go с открытым исходным кодом, которая упрощает тестирование клиентов HTTP API.
Она предоставляет удобный способ создания и воспроизведения HTTP запросов, и значительно упрощает создание надежных тестов для ваших клиентов API.
▪Запись и воспроизведение тестов
▪Автоматическое удаления конфиденциальной информации
▪Проверка запросов для обеспечения их целостности
▪Полная интеграция с GO протоколом http.Client
▪Легко расширяемые и настраиваемые опции
▪ Github
@Golang_google
Она предоставляет удобный способ создания и воспроизведения HTTP запросов, и значительно упрощает создание надежных тестов для ваших клиентов API.
▪Запись и воспроизведение тестов
▪Автоматическое удаления конфиденциальной информации
▪Проверка запросов для обеспечения их целостности
▪Полная интеграция с GO протоколом http.Client
▪Легко расширяемые и настраиваемые опции
go get github.com/areknoster/hypert
▪ Github
@Golang_google
👍16😁6❤2🔥2
✅ Go отлично подходит для работы с большими языковыми моделями и генеративным ИИ.
В этом выпуске "On the Go" показано, как использовать Go для работы с генеративным ИИ с помощью Gemini Pro.
▪Видео
▪Nvidia бесплатные обучающие курсы по генеративному ИИ
@Golang_google
В этом выпуске "On the Go" показано, как использовать Go для работы с генеративным ИИ с помощью Gemini Pro.
▪Видео
▪Nvidia бесплатные обучающие курсы по генеративному ИИ
@Golang_google
❤10🤬7🔥4👍3😁1
Простой и удобный способ инициализировать конфигурацию в структуры, с помощью структурных тегов.
Поддерживаемые форматы:
yaml
, toml
, json
, env
Создается структура с тэгами, затем указывается источник конфигурации и ссылка на переменную структуры. Источников может быть несколько, значения будут перекрываться в порядке инициализации.
▪️Github
▪️Docs
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤6🔥6😁2
Никаких ключей OpenAI или Google API не требуется.
Серверная часть написана на golang.
▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥8❤4
🔥 Дайджест полезных материалов из мира Golang за неделю
Почитать:
— Dataloader 3.0: Новый алгоритм для решения проблемы N+1
— Выпущены версии 1.22.2 и 1.21.9!
— DevOps лучшие бесплатные курсы, книги и ресурсы
— Golang: Мои Открытия
— Data Flow Analysis для Go
— Миграция баз данных на GO
— Beego в Golang для начинающих
— Создание серверного Live Chat приложения с использованием Next.js, Fauna и WunderGraph для GraphQL Live Queries
— Разбираемся в новом роутинге в Go 1.22
— Интервью Роберта Пайка про Go
— Огромный список лучших бесплатных курсов Data Science.
— Масштабирование подписок GraphQL в Go с использованием Epoll и архитектуры, основанной на событиях
— 👋 Go "Hello world!" guide
— Application Of The Multiple Return Function
— Implementing OTel Trace Context Propagation Through Message Brokers with Go
— Golang >>> Rust 🔥[Prediction]
— Zero cost debug assertions in Go
— Real-Time Example: Using Goroutines and Channels
— Over 6K Lines Of Code In March, What's The Takeaway?
— Simple constant time weighted random choice algorithm
— Portr: open-source self-hosted tunnel designed for teams
Проекты
▪ Beego — новая версия высокопроизводительного Go фреймворка для разработки RESTful API, веб-приложений и бэкенд-сервисов, вдохновленный Tornado, Sinatra и Flask.
▪Паттерны проектирования с примерами на Go
▪ Freeze — полезный Go инструмент для генерации изображений кода и вывода терминала.
▪Skopeo - это утилита командной строки, которая выполняет различные операции с образами контейнеров и их хранилищами.
Посмотреть:
🌐 Why Golang HTTP Handlers Should Return An Error (⏱ 11:43)
🌐 Golang HTTP Error Handlers & Freestyle Coding To Get Better (⏱ 02:09:24)
🌐 Solving A Golang Job Interview Assignment With Kafka (⏱ 02:24:10)
🌐 1 BILLION ROWS CHALLENGE IN GOLANG (⏱ 02:18:57)
🌐 Пишем рантайм Golang на чистом C | Планировщик Go (⏱ 16:44)
Хорошего дня!
@Golang_google
Почитать:
— Dataloader 3.0: Новый алгоритм для решения проблемы N+1
— Выпущены версии 1.22.2 и 1.21.9!
— DevOps лучшие бесплатные курсы, книги и ресурсы
— Golang: Мои Открытия
— Data Flow Analysis для Go
— Миграция баз данных на GO
— Beego в Golang для начинающих
— Создание серверного Live Chat приложения с использованием Next.js, Fauna и WunderGraph для GraphQL Live Queries
— Разбираемся в новом роутинге в Go 1.22
— Интервью Роберта Пайка про Go
— Огромный список лучших бесплатных курсов Data Science.
— Масштабирование подписок GraphQL в Go с использованием Epoll и архитектуры, основанной на событиях
— 👋 Go "Hello world!" guide
— Application Of The Multiple Return Function
— Implementing OTel Trace Context Propagation Through Message Brokers with Go
— Golang >>> Rust 🔥[Prediction]
— Zero cost debug assertions in Go
— Real-Time Example: Using Goroutines and Channels
— Over 6K Lines Of Code In March, What's The Takeaway?
— Simple constant time weighted random choice algorithm
— Portr: open-source self-hosted tunnel designed for teams
Проекты
▪ Beego — новая версия высокопроизводительного Go фреймворка для разработки RESTful API, веб-приложений и бэкенд-сервисов, вдохновленный Tornado, Sinatra и Flask.
▪Паттерны проектирования с примерами на Go
▪ Freeze — полезный Go инструмент для генерации изображений кода и вывода терминала.
▪Skopeo - это утилита командной строки, которая выполняет различные операции с образами контейнеров и их хранилищами.
Посмотреть:
🌐 Why Golang HTTP Handlers Should Return An Error (⏱ 11:43)
🌐 Golang HTTP Error Handlers & Freestyle Coding To Get Better (⏱ 02:09:24)
🌐 Solving A Golang Job Interview Assignment With Kafka (⏱ 02:24:10)
🌐 1 BILLION ROWS CHALLENGE IN GOLANG (⏱ 02:18:57)
🌐 Пишем рантайм Golang на чистом C | Планировщик Go (⏱ 16:44)
Хорошего дня!
@Golang_google
👍15🔥4❤3😁1
Попутно идёт знакомство с базовыми подходами к работе с авторизацией, а в конце — настройка автоматического деплоя на сервер с помощью GitHub Actions.
Содержание
• Как правильнее: SSO или Auth?
• Архитектура
• Описание контракта и генерация кода
• Точка входа и конфигурация
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
❤28👍7🔥7😁2