Библиотека Go (Golang) разработчика
2.63K subscribers
290 photos
96 videos
29 files
354 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