Описание кейса 80-кратного улучшения производительности кэширования в Go за счёт отказа от JSON в пользу gob.
https://www.ksred.com/80x-caching-improvement-in-go/
https://www.ksred.com/80x-caching-improvement-in-go/
Дженерики в Go с примерами кода (Generics in Golang)
Несколько лет назад для Go были предложены дженерики, и в начале этого года они наконец были приняты в язык.
Как дженерики действительно повлияют на Go? Изменит ли это то, как мы кодируем?
Чтобы действительно ответить на эти вопросы, нам нужно взглянуть на то, как работают дженерики.
👉 @golang_lib
Несколько лет назад для Go были предложены дженерики, и в начале этого года они наконец были приняты в язык.
Как дженерики действительно повлияют на Go? Изменит ли это то, как мы кодируем?
Чтобы действительно ответить на эти вопросы, нам нужно взглянуть на то, как работают дженерики.
👉 @golang_lib
Пример криптографии (классический шифр)на GO
Ниже приведен очень простой пример: мы создали простой шифр для шифрования и дешифрования открытого текста в зашифрованный текст и наоборот. Алгоритм cipherAlgorithm() одинаково хорош и просто для шифрования и дешифрования. Мы использовали ключи 01, 10 и 15 для шифрования и дешифрования сообщения. Результат шифрования каждый раз разный, когда используется другой ключ. Этот шифр сдвигает букву на основе значения ключа, ключ играет важную роль в данном примере.
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
Ниже приведен очень простой пример: мы создали простой шифр для шифрования и дешифрования открытого текста в зашифрованный текст и наоборот. Алгоритм 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
С этой статьи начинается серия небольших рассказов о необычных подводных камнях, которые можно встретить в начале разработки на Go. В статьях будут примеры кода, будьте с ними аккуратнее - не все из них будут компилироваться и работать, читайте внимательно комментарии, везде будет указано, на какой строке происходит ошибка. Также в блоках кода везде табуляция заменена на пробелы - это сделано намеренно, чтобы статьи выглядели у всех одинаково.
👉 @golang_lib
Пишем простой контроллер допуска в Kubernetes на Go и разворачиваем его в кластере.
https://bshayr29.medium.com/build-your-own-admission-controllers-in-kubernetes-using-go-bef8ba38d595
👉 @golang_lib
https://bshayr29.medium.com/build-your-own-admission-controllers-in-kubernetes-using-go-bef8ba38d595
👉 @golang_lib
Medium
Build Your Own Admission Controllers in Kubernetes Using Go
Admission Control vs RBAC
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
https://shijuvar.medium.com/building-event-driven-distributed-systems-in-go-with-grpc-nats-jetstream-and-cockroachdb-c4b899c8636d
👉 @golang_lib
🔥1
Работа со строками в Golang
После изучения данной статьи вы сможете:
Получить доступ к отдельным буквам, а также манипулировать ими;
Зашифровать и расшифровать сообщение;
Написать программу для людей, что говорят на разных языках.
👉 @golang_lib
После изучения данной статьи вы сможете:
Получить доступ к отдельным буквам, а также манипулировать ими;
Зашифровать и расшифровать сообщение;
Написать программу для людей, что говорят на разных языках.
👉 @golang_lib
Golang
Манипуляция строками в Golang - Тип string в Go
Типы строк в Golang. Кодирование и декодирование с помощью шифра Цезаря и ROT13 в Golang. Работа со строками на русском языке Golang.
GoBotApiGenerator - Элегантная и современная библиотека BotAPI для GoLang.
Этот фреймворк представляет чистую реализацию на Go без каких-либо внешних библиотек.
https://github.com/Squirrel-Network/GoBotApiGenerator
👉 @golang_lib
Этот фреймворк представляет чистую реализацию на Go без каких-либо внешних библиотек.
https://github.com/Squirrel-Network/GoBotApiGenerator
👉 @golang_lib
👍2
Ускоряем hugo на 20% простым изменением в пакете reflect
Найти значительное узкое место в производительности стандартной библиотеки или зрелого приложения — это редкость.
Я был удивлён, когда в top10 списке CPU-профиля hugo при сборке digitalgov. gov на первой позиции находился метод reflect.Type.MethodByName().
В этой статье я расскажу вам о том, как так вышло и что с этим можно было бы сделать.
👉 @golang_lib
Найти значительное узкое место в производительности стандартной библиотеки или зрелого приложения — это редкость.
Я был удивлён, когда в top10 списке CPU-профиля hugo при сборке digitalgov. gov на первой позиции находился метод reflect.Type.MethodByName().
В этой статье я расскажу вам о том, как так вышло и что с этим можно было бы сделать.
👉 @golang_lib
Хабр
Ускоряем hugo на 20% простым изменением в пакете reflect
Найти значительное узкое место в производительности стандартной библиотеки или зрелого приложения — это редкость. Я был удивлён, когда в top10 списке CPU-профиля hugo при сборке digitalgov.gov на...
👍1