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
Итак, вот навскидку несколько областей применения
gorilla/context
: А вообще, применений
gorilla/context
уйма, можно почитать тут:@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Вот некоторые темы, которые обсуждаются:
— 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
skopeo не требует запуска демона для выполнения своих операций.
Инструмент может работать как с образами OCI, так и с оригинальными образами Docker v2.
▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Держите полезные рекомендации по ведению кода на 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
Встречайте годный контент)
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Local Coding Equals Global Production
Инструмент на Go, который переводит облачную инфраструктуру в режим автономной работы, плавно соединяя локальную разработку и облачные технологии.
Работа происходит автоматически, в режиме реального времени, это гарантирует постоянную оптимизацию ваших систем без сбоев.
▪Github
▪Docs
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Полезный контент
Это коллекция из 22 популярных паттернов проектирования с примерами кода на языке Go и кратким описанием паттерна.
В кратких описаниях будут употребляться классические термины, такие как Класс, Объект, Абстрактный Класс. Применимо к языку Go, это Тип, Значение этого типа и Интерфейс (где это возможно).
Умение правильно использовать шаблоны проектирования, так сказать, в нужном месте и в нужное время, помогут сохранить ваши нервные клетки, используйте эти ссылки
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🎊 Выпущены версии 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
🔥 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
✅ Go отлично подходит для работы с большими языковыми моделями и генеративным ИИ.
В этом выпуске "On the Go" показано, как использовать Go для работы с генеративным ИИ с помощью Gemini Pro.
▪Видео
▪Nvidia бесплатные обучающие курсы по генеративному ИИ
@Golang_google
В этом выпуске "On the Go" показано, как использовать Go для работы с генеративным ИИ с помощью Gemini Pro.
▪Видео
▪Nvidia бесплатные обучающие курсы по генеративному ИИ
@Golang_google
Простой и удобный способ инициализировать конфигурацию в структуры, с помощью структурных тегов.
Поддерживаемые форматы:
yaml
, toml
, json
, env
Создается структура с тэгами, затем указывается источник конфигурации и ссылка на переменную структуры. Источников может быть несколько, значения будут перекрываться в порядке инициализации.
▪️Github
▪️Docs
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Никаких ключей OpenAI или Google API не требуется.
Серверная часть написана на golang.
▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Дайджест полезных материалов из мира 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
Попутно идёт знакомство с базовыми подходами к работе с авторизацией, а в конце — настройка автоматического деплоя на сервер с помощью GitHub Actions.
Содержание
• Как правильнее: SSO или Auth?
• Архитектура
• Описание контракта и генерация кода
• Точка входа и конфигурация
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Ребята из Lamoda рассказывают, какие инструменты на Go они для себя запилили.
Вот некоторые:
Aerospike — это распределённая schema-less key-value база данных, которая работает по принципу хэш-таблицы. Основная её особенность — отсутствие схемы данных. По одному ключу в ней может храниться что угодно, в том числе мапы и списки произвольной вложенности. В итоге в коде много строк и ошибок.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM