Уменьшаем количество ошибок в коде и пишем линтеры под конкретные проекты быстро и без лишней боли. Как? Ребята из Delivery Club отвечают в последнем кейсе про анализ синтаксиса.
Из статьи вы узнаете про неочевидные приемы автоматизации проверки кода, познакомитесь с go-ruleguard и другими хитростями разработчиков Delivery Club.
Все подробности по ссылке.
Из статьи вы узнаете про неочевидные приемы автоматизации проверки кода, познакомитесь с go-ruleguard и другими хитростями разработчиков Delivery Club.
Все подробности по ссылке.
❤1👍1
Notify - интересная библиотека на Golang для отправки одного сообщения на несколько мессенджеров. Отличный инструмент, чтобы по среди ночи узнать от бота, что джун уронил прод.
https://github.com/nikoksr/notify
https://github.com/nikoksr/notify
👍12🔥5😁3
Задача с leetcode. Контейнер с наибольшим количеством воды
Дан целочисленный массив height длины n. Нарисовано n вертикальных линий, две конечные точки i-й линии равны (
Верните максимальное количество воды, которое может храниться в контейнере. Обратите внимание, что вы не можете наклонять контейнер.
Пример 1 (картинка):
Ввод:
Объяснение: Вышеуказанные вертикальные линии представлены массивом
Пример 2:
Ввод:
Решение:
Дан целочисленный массив height длины n. Нарисовано n вертикальных линий, две конечные точки i-й линии равны (
i, 0
) и (i, height[i]
). Найдите две линии, которые вместе с осью абсцисс образуют контейнер, содержащий наибольшее количество воды. Верните максимальное количество воды, которое может храниться в контейнере. Обратите внимание, что вы не можете наклонять контейнер.
Пример 1 (картинка):
Ввод:
height = [1,8,6,2,5,4,8,3,7]
Вывод: 49 Объяснение: Вышеуказанные вертикальные линии представлены массивом
[1,8,6,2,5,4,8,3,7].
В этом случае максимальная площадь воды (синяя секция), которую может содержать контейнер, составляет 49.Пример 2:
Ввод:
height = [1,1]
Вывод: 1Решение:
func maxArea(height []int) int {
var maxArea int = 0
var i int = 0
var j int = len(height)-1
var result int = 0
for i < j {
if(height[i] <= height[j]) {
result = height[i] * (j-i)
i++
} else {
result = height[j] * (j-i)
j--
}
if(result > maxArea) {
maxArea = result
}
}
return maxArea
}
Пишите свое решение в комментариях👇👍7🔥1💩1🤡1
🔼 🔽 Bittorrent с нуля на Go
BitTorrent — протокол загрузки и распространения файлов через Интернет. В отличие от традиционных отношений клиент/сервер, когда загрузчики подключаются к центральному серверу (например, для просмотра фильма на Netflix или загрузки веб-страницы), участники сети BitTorrent, называемые одноранговыми узлами, загружают фрагменты файлов друг с друга.
💎 Чат: ссылка
Читать статью
BitTorrent — протокол загрузки и распространения файлов через Интернет. В отличие от традиционных отношений клиент/сервер, когда загрузчики подключаются к центральному серверу (например, для просмотра фильма на Netflix или загрузки веб-страницы), участники сети BitTorrent, называемые одноранговыми узлами, загружают фрагменты файлов друг с друга.
💎 Чат: ссылка
Читать статью
🔥5👍2❤1
Go, я создал 🙌
15 мая стартует новый поток курса «Golang для инженеров».
Вы научитесь писать сложные программы на Go, сможете легко улучшать качество кода и уверенно управлять изменениями в проекте. Узнаете, как автоматизировать процесс разработки и повысить уровень администрирования.
А еще у нас отличная новость для тех, кто хочет присмотреться к курсу, оценить предлагаемый стек и увидеть подачу спикеров. Мы открыли доступ к первым двум модулям!
Обучение пройдёт в живом формате — будут онлайн-встречи со спикерами, обратная связь по домашним заданиям от ревьюеров и закрытый чат для участников 💬
Курс подойдет также разработчикам и новичкам в программировании.
Посмотреть программу и занять место 👈
15 мая стартует новый поток курса «Golang для инженеров».
Вы научитесь писать сложные программы на Go, сможете легко улучшать качество кода и уверенно управлять изменениями в проекте. Узнаете, как автоматизировать процесс разработки и повысить уровень администрирования.
А еще у нас отличная новость для тех, кто хочет присмотреться к курсу, оценить предлагаемый стек и увидеть подачу спикеров. Мы открыли доступ к первым двум модулям!
Обучение пройдёт в живом формате — будут онлайн-встречи со спикерами, обратная связь по домашним заданиям от ревьюеров и закрытый чат для участников 💬
Курс подойдет также разработчикам и новичкам в программировании.
Посмотреть программу и занять место 👈
💩8👍2👎2🔥2🤔1🤬1🤮1
Generic Data Structures and
Algorithms in Go
Автор: Richard Wiener
Год издания: 2022
#go #en
Скачать книгу
Algorithms in Go
Автор: Richard Wiener
Год издания: 2022
#go #en
Скачать книгу
Автоматизация оптимизаций в Go
В Delivery Club недавно провели два митапа: по оптимизациям и по новому линтеру. Линтер умеет проверять оптимизации, ошибки и стиль кода. Имеет возможность автоисправления кода и расширения локальными проверками.
Как подключить линтер и какие еще существуют у него возможности, можно узнать в статье по ссылке.
В Delivery Club недавно провели два митапа: по оптимизациям и по новому линтеру. Линтер умеет проверять оптимизации, ошибки и стиль кода. Имеет возможность автоисправления кода и расширения локальными проверками.
Как подключить линтер и какие еще существуют у него возможности, можно узнать в статье по ссылке.
🔥6😱1
Как просто структурировать проект на Golang: гайд для начинающих разработчиков
Backend-разработчик из inDriver написал гайд о том, как правильно выстроить архитектуру и структуру проекта. Это важная задача, если вы хотите сохранить чистоту кода и повысить производительность команды.
В статье вы найдете описание всех директорий, а также ссылку на публичный sample-проект автора на GitHub.
Читайте материал по ссылке: https://habr.com/ru/company/indriver/blog/690088/
Backend-разработчик из inDriver написал гайд о том, как правильно выстроить архитектуру и структуру проекта. Это важная задача, если вы хотите сохранить чистоту кода и повысить производительность команды.
В статье вы найдете описание всех директорий, а также ссылку на публичный sample-проект автора на GitHub.
Читайте материал по ссылке: https://habr.com/ru/company/indriver/blog/690088/
🔥9❤2💩1🤡1
25 мая в Петербурге – в оффлайн и онлайн формате – пройдет митап для всех, кто только задумывается или уже начал применять Go в коммерческой разработке. Ждем разработчиков любого уровня, лидов и команды!
Регистрируйтесь и приходите или смотрите трансляцию онлайн, участие бесплатное.
>> To Go or not to Go (Евгений Соколов, YADRO)
Рассмотрим ключевые парадигмы программирования на Go. Узнаем, как работают горутины, планировщик, каналы и модули. И поймем, как ускорить изучение языка.
>> Функции, методы и интерфейсы в Gо: особенности и идиомы (Владислав Белогрудов, YADRO)
Вы узнаете, как идиоматично писать функции без побочных эффектов и когда это не работает. Заглянем под капот интерфейсов и устроим небольшие соревнования производительности.
>> Эффективно используем Go в команде (Геннадий Ковалев, YADRO)
Поговорим, что такое хороший код на Go с точки зрения командной разработки, и как средства языка помогут убрать лишние споры, сделать продукт тестируемым, а будущий рефакторинг — спокойным.
Регистрируйтесь и приходите или смотрите трансляцию онлайн, участие бесплатное.
>> To Go or not to Go (Евгений Соколов, YADRO)
Рассмотрим ключевые парадигмы программирования на Go. Узнаем, как работают горутины, планировщик, каналы и модули. И поймем, как ускорить изучение языка.
>> Функции, методы и интерфейсы в Gо: особенности и идиомы (Владислав Белогрудов, YADRO)
Вы узнаете, как идиоматично писать функции без побочных эффектов и когда это не работает. Заглянем под капот интерфейсов и устроим небольшие соревнования производительности.
>> Эффективно используем Go в команде (Геннадий Ковалев, YADRO)
Поговорим, что такое хороший код на Go с точки зрения командной разработки, и как средства языка помогут убрать лишние споры, сделать продукт тестируемым, а будущий рефакторинг — спокойным.
👍10
🐧 Linux Junior - канал для Linux любителей.
Тем кому нравится командная строка и то, какое волшебство можно в ней делать.
Подписывайся и отвечай на вопросы, решай задачки: @juniorlinux
Тем кому нравится командная строка и то, какое волшебство можно в ней делать.
-rf *Эти и другие команды ты можешь выучить у нас в игровой форме.
man man
touch -m old_file
shutdown now
Подписывайся и отвечай на вопросы, решай задачки: @juniorlinux
👍1
Что выведет код?
package mainОтвет
import "fmt"
func main() {
a := [...]int{0, 1, 2, 3}
x := a[:1]
y := a[2:]
fmt.Println(a, x, y)
x = append(x, y...)
x = append(x, y...)
fmt.Println(a, x)
}
👍5
Редактирование видео в Golang
MovieGo - это Golang пакет для редактирования видео. Данный пакет предназначен для быстрой обработки рутинных задач, связанных с редактированием видео. Основным ядром является пакет ffmpeg-go, который упрощает работу с библиотекой ffmpeg.
Возможности пакета на данный момент:
- Редактирование размера видео
- Обрезка видео на фрагменты
- Конкатенация нескольких видео в одно
- Скриншот кадра из видео
- Fade-in и Fade-out для видео и аудио-дорожки
Github: https://github.com/mowshon/moviego
Статья: https://golangify.com/moviego-video-editing
MovieGo - это Golang пакет для редактирования видео. Данный пакет предназначен для быстрой обработки рутинных задач, связанных с редактированием видео. Основным ядром является пакет ffmpeg-go, который упрощает работу с библиотекой ffmpeg.
Возможности пакета на данный момент:
- Редактирование размера видео
- Обрезка видео на фрагменты
- Конкатенация нескольких видео в одно
- Скриншот кадра из видео
- Fade-in и Fade-out для видео и аудио-дорожки
Github: https://github.com/mowshon/moviego
Статья: https://golangify.com/moviego-video-editing
👍8
Что выведет код?
Ответ
package main
func main() {
x := 0.0
y := 1.0 / x // +Inf
z := x * y
println(z)
}
Ответ
👍3
Документация по GO на русском. Держите: https://golang-blog.blogspot.com/p/go-specification.html?m=1
Blogspot
Спецификация Go
В подборке статей Спецификация Go освещена спецификация Go 1.12 версии от 16 ноября, 2018 года.
👍22🗿1
Machine Learning With Go
Автор: Daniel Whitenack, Janani Selvaraj
Год издания: 2019
#go #en
Скачать книгу
Автор: Daniel Whitenack, Janani Selvaraj
Год издания: 2019
#go #en
Скачать книгу
🤔3🤡2👍1
С какими проблемами вы сталкивались при тестировании облачных платформ? Какие инструменты для этого предпочитаете?
💎 Чат: ссылка
Своим опытом в статье на Хабре поделился Илья Казначеев, техлид MTS Cloud — облачного провайдера МТС.
Он рассказал, какие виды тестов пробовали, как боролись с проблемами и к чему в итоге пришли.
Читать статью
💎 Чат: ссылка
Своим опытом в статье на Хабре поделился Илья Казначеев, техлид MTS Cloud — облачного провайдера МТС.
Он рассказал, какие виды тестов пробовали, как боролись с проблемами и к чему в итоге пришли.
Читать статью
Экономное вычисление выражений в польской записи
Польская запись — это форма записи арифметических, логических и алгебраических выражений, в которой операция располагается слева от операндов. Выражения в польской записи могут обходиться без скобок, однако мы оставим скобки для наглядности.
Например, выражение в польской записи выглядит как
Выражения могут содержать повторяющиеся подвыражения. Экономное вычисление таких выражений подразумевает, что повторяющиеся подвыражения вычисляются только один раз.
Требуется составить программу econom.go, вычисляющую количество операций, которые нужно выполнить для экономного вычисления выражения. Примеры работы программы приведены в таблице:
Набор тестов для программы экономного вычисления выражений в польской записи
Приведем вариант кода без скобок.
Польская запись — это форма записи арифметических, логических и алгебраических выражений, в которой операция располагается слева от операндов. Выражения в польской записи могут обходиться без скобок, однако мы оставим скобки для наглядности.
Например, выражение в польской записи выглядит как
(* 5 (+ 3 4))
Пусть выражения в польской записи состоят из имён переменных (от a до z), круглых скобок и трёх знаков операций: #, $ и @ (смысл операций мы определять не будем).Выражения могут содержать повторяющиеся подвыражения. Экономное вычисление таких выражений подразумевает, что повторяющиеся подвыражения вычисляются только один раз.
Требуется составить программу econom.go, вычисляющую количество операций, которые нужно выполнить для экономного вычисления выражения. Примеры работы программы приведены в таблице:
Набор тестов для программы экономного вычисления выражений в польской записи
Выражение Количество операций
x 0
($xy) 1
($(@ab)c) 2
(#i($jk)) 2
(#($ab)($ab)) 2
(@(#ab)($ab)) 3
(#($a($b($cd)))(@($b($cd))($a($b($cd))))) 5
(#($(#xy)($(#ab)(#ab)))(@z($(#ab)(#ab)))) 6
Решениеpackage main
func main() {
println(opCount("(#($(#xy)($(#ab)(#ab)))(@z($(#ab)(#ab))))"))
println(opCount("($xy)"))
println(opCount("x"))
}
func opCount(expr string) int {
expressions := map[string]bool{}
var openBraces []int
for i, c := range expr {
switch c {
case '(':
openBraces = append(openBraces, i)
case ')':
lastOpenBrace := len(openBraces) - 1
subExprStart := openBraces[lastOpenBrace]
subExpr := expr[subExprStart:i]
expressions[subExpr] = true
openBraces = openBraces[:lastOpenBrace]
}
}
return len(expressions)
}
Скобки очень сильно упрощают задачу, при этом в настоящей польской нотации скобки не нужны. Приведем вариант кода без скобок.
const oper = node_t("oper")
const expr = node_t("expr")
type node struct {
t node_t
v string
}
func opCount(input string) int {
expressions := map[string]bool{}
var stack []node
for _, c := range input {
switch c {
case '$', '#', '@':
stack = append(stack, node{t: oper, v: fmt.Sprintf("%s", c)})
default:
stack = append(stack, node{t: expr, v: fmt.Sprintf("%s", c)})
}
for canFold(stack) {
lastIdx := len(stack) - 1
operIdx := lastIdx - 2
folded := node{t: expr, v: stack[operIdx].v + stack[operIdx+1].v + stack[operIdx+2].v}
expressions[folded.v] = true
stack[operIdx] = folded
stack = stack[:operIdx+1]
}
}
return len(expressions)
}
func canFold(stack []node) bool {
stackLen := len(stack)
return stackLen >= 3 && stack[stackLen-3].t == oper && stack[stackLen-2].t == expr && stack[stackLen-1].t == expr
}
❤4👍3🆒2
Как подсчитать общее количество элементов, определенных в Enum?
Пишите свое решение в комментариях👇
package main
import "fmt"
const (
I1 = 1 << iota
I2
I3
ILen int = iota
)
const (
X1 = "A"
X2 = "B"
X3 = "C"
XLen int = iota
)
func main() {
fmt.Println(I1, I2, I3, ILen)
fmt.Println(X1, X2, X3, XLen)
}
ОтветПишите свое решение в комментариях👇
👍3🤮2💩2