В некоторых сферах программирования нормально хотеть написать такую структуру данных или алгоритм, которые могут работать с элементами разных типов. Например, список дженериков или алгоритм сортировки, которому нужна только функция сравнения. В разных языках предложены всевозможные способы решения этой задачи: от простого указания программистам на подходящие общие функции (С, Go) до таких мощных систем дженериков, что они стали полными по Тьюрингу (Rust, C++). В этой статье я расскажу о системах дженериков из разных языков и их реализации. Начну с решения задачи в языках без подобной системы (вроде С), а затем покажу, как постепенное добавление расширений приводит к системам из других языков.
Читать полностью »
Рубрика «Go» - 22
Модели дженериков и метапрограммирования: Go, Rust, Swift, D и другие
2019-07-25 в 17:41, admin, рубрики: D, generics, Go, Rust, swift, Анализ и проектирование систем, Блог компании Mail.Ru Group, никто не читает теги, ПрограммированиеGoLand 2019.2: поддержка вызовов функций во время отладки, улучшенные цветовые схемы, кастомные Postfix Completion
2019-07-25 в 15:58, admin, рубрики: Go, GoLand, golang, jetbrains, Блог компании JetBrains, ПрограммированиеСегодня мы выпустили GoLand 2019.2 и спешим рассказать вам о том, что появилось в новой версии.
Поддержка вызовов функций во время отладки
Теперь можно выяснить, что происходит с выражением в любой момент выполнения программы.
Обратите внимание, что эта функциональность создана на основе экспериментальной поддержки вызовов функций в Delve и Go Runtime.
Если вы столкнетесь с ошибками или проблемами, связанными с поддержкой вызовов функций, сообщайте о них в нашем трекере.
Улучшенные цветовые схемы Default и Darcula
В версии 2019.2 мы разнообразили семантическую подсветку кода в цветовых схемах Default и Darcula.
Изменение помогает быстрее разобраться в коде и вникнуть в его логику. Теперь легче отличать имена пакетов от переменных, встроенные конструкции кода — от ваших собственных, а преобразования типов — от вызовов функций.
Кроме того, ресиверы методов и вызовы функций получили отдельные цвета. Как обычно, вы можете настроить схемы на свой вкус в меню Settings/Preferences | Editor | Color Scheme.
Golang: специфические вопросы производительности
2019-07-25 в 11:04, admin, рубрики: Go, golang, golangconf, Блог компании Конференции Олега Бунина (Онтико), высокая производительность, Программирование, Разработка веб-сайтовЯзык Go набирает популярность. Настолько уверенно, что появляется все больше конференций, например, GolangConf, а язык входит в десятку самых высокооплачиваемых технологий. Поэтому уже имеет смысл разговаривать о его специфических проблемах, например, производительности. Кроме общих для всех компилируемых языков проблем, у Go есть и свои собственные. Они связаны с оптимизатором, стеком, системой типов и моделью многозадачности. Способы их решения и обхода иногда бывают весьма специфическими.
Даниил Подольский, хоть и евангелист Go, тоже встречает в нем много странного. Все странное и, главное, интересное собирает и тестирует, а потом рассказывает об этом на HighLoad++. В расшифровке доклада будут цифры, графики, примеры кода, результаты работы профайлера, сравнение производительности одних и тех же алгоритмов на разных языках — и все остальное, за что мы так ненавидим слово «оптимизация». В  расшифровке не будет откровений — откуда они в таком простом языке, — и всего, о чем можно прочесть в газетах.
Как создать простой микросервис на Golang и gRPC и выполнить его контейнеризацию с помощью Docker
2019-07-25 в 8:35, admin, рубрики: docker, Go, golang, grpc, Microservices, protobuf, микросервисы, ПрограммированиеПривет! представляю вашему вниманию перевод статьи «Go, gRPC and Docker» автора Mat Evans.
Существует множество статей о совместном использовании Go и Docker. Создавать контейнеры, способные взаимодействовать с клиентами и между собой, очень легко. Далее следует небольшой пример того, как это делается на базовом уровне.
Читать полностью »
Какой язык — D, Go или Rust имеет лучшие перспективы заменить C и почему?
2019-07-24 в 9:16, admin, рубрики: D, dlang, Go, Rust, Программирование, системное программирование, флейм и провокацияНесмотря на мой статус и очевидную предвзятость как одного из создателей D, я постараюсь отвечать откровенно; Я следовал путям Go и Rust, и я абсолютно точно знаю, где стирают грязное белье в D. Я поощряю людей на аналогичных позициях в сообществах Rust и Go чтобы и они делились своим мнением. Так вот.
Для начала, где то в вопросе должен фигурировать и C++. Должен ли он быть заменен вместе с С, или же он один из кандидатов на замещение С, но в любом случае С++ это ключевой элемент уравнения. Это ближайший язык к С и очевидный шаг вперед. Учитывая возраст С++, я в дальнейшем полагаю в этом вопросе что С++ вместе с С является целью для замены.
Читать полностью »
LLVM IR и Go
2019-07-22 в 4:01, admin, рубрики: Go, LLVM, llvm ir, open source, Компиляторы, ПрограммированиеВ этой статье мы рассмотрим, как построить программу на Go, такую, как компилятор или статический анализатор, которая взаимодействует с фреймворком компиляции LLVM, используя язык ассемблера LLVM IR.
TL;DR мы написали библиотеку для взаимодействия с LLVM IR на чистом Go, см. ссылки на код и на пример проекта.
Делать хорошо, делая плохо: написание «злого» кода с помощью Go, часть 1
2019-07-19 в 9:58, admin, рубрики: Go, golang, перевод, юморВредные советы для Go-программиста
После десятилетий программирования на Java, последние несколько лет я в основном работал на Go. Работать с Go — здорово, прежде всего потому, что за кодом очень легко следовать. Java упростила модель программирования C ++, удалив множественное наследование, ручное управление памятью и перегрузку операторов. Go делает то же самое, продолжая двигаться к простому и понятному стилю программирования, полностью удаляя наследование и перегрузку функций. Простой код — читаемый код, а читаемый код — поддерживаемый код. И это здорово для компании и моих сотрудников.
Как и во всех культурах, у разработки программного обеспечения есть свои легенды, истории, которые пересказываются у кулера для воды. Все мы слышали о разработчиках, которые вместо того, чтобы сосредоточиться на создании качественного продукта, зацикливаются на защите собственной работы от посторонних. Им не нужен поддерживаемый код, потому что это означает, что другие люди смогут его понять и доработать. А возможно ли такое на Go? Можно ли сделать код на Go настолько сложным? Скажу сразу – дело это непростое. Давайте рассмотрим возможные варианты.
Читать полностью »
Создание минимального Docker-контейнера для Go-приложений
2019-07-18 в 12:34, admin, рубрики: docker, Go, контейнеры, переводПривет! Предлагаю вашему вниманию перевод статьи основателя сервиса Meetspaceapp Nick Gauthier «Building Minimal Docker Containers for Go Applications».
Время чтения: 6 минут
Существует множество, как официальных, так и поддерживаемых сообществом контейнеров для различных языков программирования (включая Go). Но эти контейнеры могут быть довольно большими. Давайте сперва сравним стандартные методы создания контейнеров для Go-приложений, а затем я покажу способ создания крайне маленьких статических контейнерезированных Go-приложений
Часть 1: Наше «приложение»
Для тестирования нам потребуется какое-нибудь маленькое приложение. Давайте будем фетчить google.com и выводить размер HTML.
package main
import (
"fmt"
"io/ioutil"
"net/http"
"os"
)
func main() {
resp, err := http.Get("https://google.com")
check(err)
body, err := ioutil.ReadAll(resp.Body)
check(err)
fmt.Println(len(body))
}
func check(err error) {
if err != nil {
fmt.Println(err)
os.Exit(1)
}
}
Если мы запустимся, то получим только какое-то число. У меня вышло около 17К. Я целенаправленно решил использовать SSL, но причину объясню позднее.
Читать полностью »
Разработчики предложили убрать логотип Google с главной страницы Golang
2019-07-17 в 5:11, admin, рубрики: Go, Google, Программирование, языки программирования
Официальный аккаунт языка программирования Go в твиттере опубликовал пост с просьбой дать отзыв о новом облике своего веб-сайта. В комментариях один из пользователей заявил, что было ошибкой добавлять логотип Google в нижнем правом углу главной страницы. «Многие люди связывают проект с коммерческим продуктом Google».
Предложение вынесли на обсуждение в GitHub. Решение озвучил Эндрю Бонвентра, ведущий инженер в Go Team.
«Мы потратили много времени на то, чтобы обсудить это. Важно прояснить, что Google поддерживает Go. Google оплачивает хостинг и инфраструктуру, на которой работает golang.org, и мы надеемся, что нынешний маленький логотип — достойный компромисс», — написал он и закрыл вопрос.
Читать полностью »
Бережная обработка ошибок в микросервисах
2019-07-08 в 5:05, admin, рубрики: clean architecture, Go, обработка ошибокВ статье показано, как в Go реализовать обработку ошибок и логирование по принципу "Сделал и забыл". Способ расчитан на микросервисы на Go, работающие в Docker-контейнере и построенные с соблюдением принципов Clean Architecture.