Дженерики в 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
Веб-приложение на Golang для чтения и записи данных в JSON файл
Golang предлагает мощные инструменты для создания веб-серверов.В Golang вы можете создавать веб-серверы, с разными адресами, разными типами запросов и разными типами контента. Для веб-разработки основными пакетами стандартной библиотеки являются net/http и html/template. Используя эти два пакета, вы можете создавать полнофункциональные веб-приложения.
👉 @golang_lib
Golang предлагает мощные инструменты для создания веб-серверов.В Golang вы можете создавать веб-серверы, с разными адресами, разными типами запросов и разными типами контента. Для веб-разработки основными пакетами стандартной библиотеки являются net/http и html/template. Используя эти два пакета, вы можете создавать полнофункциональные веб-приложения.
👉 @golang_lib
Telegraph
Веб-приложение на Golang для чтения и записи данных в JSON файл
Golang предлагает мощные инструменты для создания веб-серверов.В Golang вы можете создавать веб-серверы, с разными адресами, разными типами запросов и разными типами контента. Для веб-разработки основными пакетами стандартной библиотеки являются net/http…
👍1
Задача «Маски» - разбираем решения задач для Go-разработчиков
Никита собирается открывать свой пункт выдачи заказов (ПВЗ). Для обеспечения безопасности посетителей Никита решил обеспечить ПВЗ одноразовыми медицинскими масками, которые будут поставляться каждый месяц в количестве $N$ штук. Местные поставщики продают маски по цене 0,55 рублей за одну штуку, но можно сэкономить, купив упаковку из 24 масок за 11 рублей или коробку из 16 упаковок за 160 рублей. Помогите Никите, определив, сколько коробок, упаковок и отдельных масок он должен купить, чтобы заплатить как можно меньше денег. Далее
👉 @golang_lib
Никита собирается открывать свой пункт выдачи заказов (ПВЗ). Для обеспечения безопасности посетителей Никита решил обеспечить ПВЗ одноразовыми медицинскими масками, которые будут поставляться каждый месяц в количестве $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
https://faun.pub/the-martial-arts-of-writing-go-dockerfile-9dcffd010619
👉 @golang_lib
👍2
Как я создал систему контроля версий ( VCS), используя чистый Go 🚀
https://levelup.gitconnected.com/how-was-i-build-a-version-control-system-vcs-using-pure-go-83ec8ec5d4f4
👉 @golang_lib
https://levelup.gitconnected.com/how-was-i-build-a-version-control-system-vcs-using-pure-go-83ec8ec5d4f4
👉 @golang_lib
Medium
How I built a version control system (VCS) using pure Go 🚀
Every single artifact related to the creation of your software should be under version control. [1]
👍1
Структурированное логирование JSON в приложениях на Golang
Что такое «структурированное логирование»?
Ведение журнала, или логирование — очень важная часть программного обеспечения. Логи нужны для отслеживания того, что происходит в системах, и по мере роста последних важность логов только увеличивается.
Есть много отличных инструментов для парсинга логов. Мне, например, очень нравится ElasticSearch. Но большинство из них рассчитано на структурированные логи, а не на двоичные большие объекты с обычным текстом (и не факт, что эти объекты записаны в нужном формате). Далее
👉 @golang_lib
Что такое «структурированное логирование»?
Ведение журнала, или логирование — очень важная часть программного обеспечения. Логи нужны для отслеживания того, что происходит в системах, и по мере роста последних важность логов только увеличивается.
Есть много отличных инструментов для парсинга логов. Мне, например, очень нравится ElasticSearch. Но большинство из них рассчитано на структурированные логи, а не на двоичные большие объекты с обычным текстом (и не факт, что эти объекты записаны в нужном формате). Далее
👉 @golang_lib
👍2
Логирование программ Go
Журнал пакетов стандартной библиотеки предоставляет базовую инфраструктуру для управления логами на языке GO. Основная цель ведения логов — отследить, что происходит в программе, где это происходит и когда это происходит. Логи могут обеспечивать отслеживание кода, профилирование и аналитику. Ведение журнала логирования( глаза и уши программиста) — это способ найти эти ошибки и узнать больше о том, как работает программа. Далее
👉 @golang_lib
Журнал пакетов стандартной библиотеки предоставляет базовую инфраструктуру для управления логами на языке GO. Основная цель ведения логов — отследить, что происходит в программе, где это происходит и когда это происходит. Логи могут обеспечивать отслеживание кода, профилирование и аналитику. Ведение журнала логирования( глаза и уши программиста) — это способ найти эти ошибки и узнать больше о том, как работает программа. Далее
👉 @golang_lib
👍2
Learn Go Programming by Building 11 Projects – Full Course
https://www.youtube.com/watch?v=jFfo23yIWac
👉 @golang_lib
https://www.youtube.com/watch?v=jFfo23yIWac
👉 @golang_lib
YouTube
Learn Go Programming by Building 11 Projects – Full Course
In this Go programming language course for beginners, you will improve your Go programming skills by building eleven projects.
✏️ Akhil Sharma created this course. Check out his channel: https://www.youtube.com/c/AkhilSharmaTech
⭐️ Project Code ⭐️
1. Build…
✏️ Akhil Sharma created this course. Check out his channel: https://www.youtube.com/c/AkhilSharmaTech
⭐️ Project Code ⭐️
1. Build…
Media is too big
VIEW IN TELEGRAM
Реверс Go-бинарей с использованием Ghidra
Запись доклада на Hack In The Box Cyber Week 2021 о реверсе Go-бинарей с помощью Ghidra. Доклад включает введение в семейства вредоносных IoT-программ, написанные на Go, обсуждение уникальных особенностей и препятствий бинарных файлов Go, решение распространенных проблем при реверсе вредоносного ПО на Go, разбор сценариев Ghidra, которые используют докладчики в ходе реверса, а также исследование последних разработок вокруг обфускации Go и криптеров Linux.
👉 @golang_lib
Запись доклада на Hack In The Box Cyber Week 2021 о реверсе Go-бинарей с помощью Ghidra. Доклад включает введение в семейства вредоносных IoT-программ, написанные на Go, обсуждение уникальных особенностей и препятствий бинарных файлов Go, решение распространенных проблем при реверсе вредоносного ПО на Go, разбор сценариев Ghidra, которые используют докладчики в ходе реверса, а также исследование последних разработок вокруг обфускации Go и криптеров Linux.
👉 @golang_lib
👍1
Программа для перевода температуры из Цельсия в Фаренгейты
package main
import (
"fmt"
)
type celsius float64
func (c celsius) fahrenheit() fahrenheit {
return fahrenheit((c * 9.0 / 5.0) + 32.0)
}
type fahrenheit float64
func (f fahrenheit) celsius() celsius {
return celsius((f - 32.0) * 5.0 / 9.0)
}
const (
line = "======================="
rowFormat = "| %8s | %8s |\n"
numberFormat = "%.1f"
)
type getRowFn func(row int) (string, string)
// drawTable создает таблицу с двумя столбцами.
func drawTable(hdr1, hdr2 string, rows int, getRow getRowFn) {
fmt.Println(line)
fmt.Printf(rowFormat, hdr1, hdr2)
fmt.Println(line)
for row := 0; row < rows; row++ {
cell1, cell2 := getRow(row)
fmt.Printf(rowFormat, cell1, cell2)
}
fmt.Println(line)
}
func ctof(row int) (string, string) {
c := celsius(row*5 - 40)
f := c.fahrenheit()
cell1 := fmt.Sprintf(numberFormat, c)
cell2 := fmt.Sprintf(numberFormat, f)
return cell1, cell2
}
func ftoc(row int) (string, string) {
f := fahrenheit(row*5 - 40)
c := f.celsius()
cell1 := fmt.Sprintf(numberFormat, f)
cell2 := fmt.Sprintf(numberFormat, c)
return cell1, cell2
}
func main() {
drawTable("°C", "°F", 29, ctof)
fmt.Println()
drawTable("°F", "°C", 29, ftoc)
}
👉 @golang_lib
package main
import (
"fmt"
)
type celsius float64
func (c celsius) fahrenheit() fahrenheit {
return fahrenheit((c * 9.0 / 5.0) + 32.0)
}
type fahrenheit float64
func (f fahrenheit) celsius() celsius {
return celsius((f - 32.0) * 5.0 / 9.0)
}
const (
line = "======================="
rowFormat = "| %8s | %8s |\n"
numberFormat = "%.1f"
)
type getRowFn func(row int) (string, string)
// drawTable создает таблицу с двумя столбцами.
func drawTable(hdr1, hdr2 string, rows int, getRow getRowFn) {
fmt.Println(line)
fmt.Printf(rowFormat, hdr1, hdr2)
fmt.Println(line)
for row := 0; row < rows; row++ {
cell1, cell2 := getRow(row)
fmt.Printf(rowFormat, cell1, cell2)
}
fmt.Println(line)
}
func ctof(row int) (string, string) {
c := celsius(row*5 - 40)
f := c.fahrenheit()
cell1 := fmt.Sprintf(numberFormat, c)
cell2 := fmt.Sprintf(numberFormat, f)
return cell1, cell2
}
func ftoc(row int) (string, string) {
f := fahrenheit(row*5 - 40)
c := f.celsius()
cell1 := fmt.Sprintf(numberFormat, f)
cell2 := fmt.Sprintf(numberFormat, c)
return cell1, cell2
}
func main() {
drawTable("°C", "°F", 29, ctof)
fmt.Println()
drawTable("°F", "°C", 29, ftoc)
}
👉 @golang_lib
👍1
Distributed_Services_with_Go.pdf
5.2 MB
Distributed Services with Go
Your Guide to Reliable, Scalable, and Maintainable Systems
Travis Jeffery (2021)
This is the book for Gophers who want to learn how to build distributed systems. You know the basics of Go and are eager to put your knowledge to work. Build distributed services that are highly available, resilient, and scalable. This book is just what you need to apply Go to real-world situations. Level up your engineering skills today.
👉 @golang_lib
Your Guide to Reliable, Scalable, and Maintainable Systems
Travis Jeffery (2021)
This is the book for Gophers who want to learn how to build distributed systems. You know the basics of Go and are eager to put your knowledge to work. Build distributed services that are highly available, resilient, and scalable. This book is just what you need to apply Go to real-world situations. Level up your engineering skills today.
👉 @golang_lib
👍2
Как сделать api на golang?
Вы можете использовать net/http пакет чтобы сделать GET или POST API запрос на Golang, ниже пример кода как пример:
👉 @golang_lib
Вы можете использовать net/http пакет чтобы сделать GET или POST API запрос на Golang, ниже пример кода как пример:
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
response, err := http.Get("https://вашсайт.ru/api/thread/latest")
if err != nil {
panic(err)
}
defer response.Body.Close()
// Распаковать ответ
data, err := ioutil.ReadAll(response.Body)
if err != nil {
log.Fatal(err)
}
// Вывести ответ как строку
fmt.Println(string(data))
}
👉 @golang_lib
👍1👎1