Библиотека Go (Golang) разработчика
2.56K subscribers
262 photos
95 videos
29 files
333 links
Полезные материалы по всему, что может быть полезно Golang разработчику. По всем вопросам @evgenycarter
Download Telegram
Описание кейса 80-кратного улучшения производительности кэширования в Go за счёт отказа от JSON в пользу gob.

https://www.ksred.com/80x-caching-improvement-in-go/
Дженерики в Go с примерами кода (Generics in Golang)

Несколько лет назад для Go были предложены дженерики, и в начале этого года они наконец были приняты в язык.

Как дженерики действительно повлияют на Go? Изменит ли это то, как мы кодируем?

Чтобы действительно ответить на эти вопросы, нам нужно взглянуть на то, как работают дженерики.

👉 @golang_lib
Пример криптографии (классический шифр)на GO

Ниже приведен очень простой пример: мы создали простой шифр для шифрования и дешифрования открытого текста в зашифрованный текст и наоборот. Алгоритм cipherAlgorithm() одинаково хорош и просто для шифрования и дешифрования. Мы использовали ключи 01, 10 и 15 для шифрования и дешифрования сообщения. Результат шифрования каждый раз разный, когда используется другой ключ. Этот шифр сдвигает букву на основе значения ключа, ключ играет важную роль в данном примере.

package main

import (
"fmt"
"unicode"
)

// Cipher encrypts and decrypts a string.
type Cipher interface {
Encryption(string) string
Decryption(string) string
}

// Cipher holds the key used to encrypts and decrypts messages.
type cipher []int

// cipherAlgorithm encodes a letter based on some function.
func (c cipher) cipherAlgorithm(letters string, shift func(int, int) int) string {
shiftedText := ""
for _, letter := range letters {
if !unicode.IsLetter(letter) {
continue
}
shiftDist := c[len(shiftedText)%len(c)]
s := shift(int(unicode.ToLower(letter)), shiftDist)
switch {
case s < 'a':
s += 'z' - 'a' + 1
case 'z' < s:
s -= 'z' - 'a' + 1
}
shiftedText += string(s)
}
return shiftedText
}

// Encryption encrypts a message.
func (c *cipher) Encryption(plainText string) string {
return c.cipherAlgorithm(plainText, func(a, b int) int { return a + b })
}

// Decryption decrypts a message.
func (c *cipher) Decryption(cipherText string) string {
return c.cipherAlgorithm(cipherText, func(a, b int) int { return a - b })
}

// NewCaesar creates a new Caesar shift cipher.
func NewCaesar(key int) Cipher {
return NewShift(key)
}

// NewShift creates a new Shift cipher.
func NewShift(shift int) Cipher {
if shift < -25 || 25 < shift || shift == 0 {
return nil
}
c := cipher([]int{shift})
return &c
}

func main() {
c := NewCaesar(1)
fmt.Println("Encrypt Key(01) abcd =>", c.Encryption("abcd"))
fmt.Println("Decrypt Key(01) bcde =>", c.Decryption("bcde"))
fmt.Println()

c = NewCaesar(10)
fmt.Println("Encrypt Key(10) abcd =>", c.Encryption("abcd"))
fmt.Println("Decrypt Key(10) klmn =>", c.Decryption("klmn"))
fmt.Println()

c = NewCaesar(15)
fmt.Println("Encrypt Key(15) abcd =>", c.Encryption("abcd"))
fmt.Println("Decrypt Key(15) pqrs =>", c.Decryption("pqrs"))
}
вывод программы:

Encrypt Key(01) abcd => bcde
Decrypt Key(01) bcde => abcd

Encrypt Key(10) abcd => klmn
Decrypt Key(10) klmn => abcd

Encrypt Key(15) abcd => pqrs
Decrypt Key(15) pqrs => abcd


👉 @golang_lib
Интерфейсы в Go — как красиво выстрелить себе в ногу

С этой статьи начинается серия небольших рассказов о необычных подводных камнях, которые можно встретить в начале разработки на Go. В статьях будут примеры кода, будьте с ними аккуратнее - не все из них будут компилироваться и работать, читайте внимательно комментарии, везде будет указано, на какой строке происходит ошибка. Также в блоках кода везде табуляция заменена на пробелы - это сделано намеренно, чтобы статьи выглядели у всех одинаково.

👉 @golang_lib
Event-Driven Distributed Systems: построение и реализация на Go + gRPC + NATS JetStream + CockroachDB.

https://shijuvar.medium.com/building-event-driven-distributed-systems-in-go-with-grpc-nats-jetstream-and-cockroachdb-c4b899c8636d

👉 @golang_lib
🔥1
Работа со строками в Golang

После изучения данной статьи вы сможете:
Получить доступ к отдельным буквам, а также манипулировать ими;
Зашифровать и расшифровать сообщение;
Написать программу для людей, что говорят на разных языках.

👉 @golang_lib
GoBotApiGenerator - Элегантная и современная библиотека BotAPI для GoLang.

Этот фреймворк представляет чистую реализацию на Go без каких-либо внешних библиотек.

https://github.com/Squirrel-Network/GoBotApiGenerator

👉 @golang_lib
👍2
Ускоряем hugo на 20% простым изменением в пакете reflect

Найти значительное узкое место в производительности стандартной библиотеки или зрелого приложения — это редкость.

Я был удивлён, когда в top10 списке CPU-профиля hugo при сборке digitalgov. gov на первой позиции находился метод reflect.Type.MethodByName().

В этой статье я расскажу вам о том, как так вышло и что с этим можно было бы сделать.

👉 @golang_lib
👍1
Веб-приложение на Golang для чтения и записи данных в JSON файл

Golang предлагает мощные инструменты для создания веб-серверов.В Golang вы можете создавать веб-серверы, с разными адресами, разными типами запросов и разными типами контента. Для веб-разработки основными пакетами стандартной библиотеки являются net/http и html/template. Используя эти два пакета, вы можете создавать полнофункциональные веб-приложения.

👉 @golang_lib
👍1
Задача «Маски» - разбираем решения задач для Go-разработчиков

Никита собирается открывать свой пункт выдачи заказов (ПВЗ). Для обеспечения безопасности посетителей Никита решил обеспечить ПВЗ одноразовыми медицинскими масками, которые будут поставляться каждый месяц в количестве $N$ штук. Местные поставщики продают маски по цене 0,55 рублей за одну штуку, но можно сэкономить, купив упаковку из 24 масок за 11 рублей или коробку из 16 упаковок за 160 рублей. Помогите Никите, определив, сколько коробок, упаковок и отдельных масок он должен купить, чтобы заплатить как можно меньше денег. Далее

👉 @golang_lib
👍1
Полезные советы по написанию Dockerfile для проектов на Go.

https://faun.pub/the-martial-arts-of-writing-go-dockerfile-9dcffd010619

👉 @golang_lib
👍2
Структурированное логирование JSON в приложениях на Golang

Что такое «структурированное логирование»?

Ведение журнала, или логирование — очень важная часть программного обеспечения. Логи нужны для отслеживания того, что происходит в системах, и по мере роста последних важность логов только увеличивается.

Есть много отличных инструментов для парсинга логов. Мне, например, очень нравится ElasticSearch. Но большинство из них рассчитано на структурированные логи, а не на двоичные большие объекты с обычным текстом (и не факт, что эти объекты записаны в нужном формате). Далее

👉 @golang_lib
👍2