Библиотека Go (Golang) разработчика
2.57K subscribers
262 photos
95 videos
29 files
333 links
Полезные материалы по всему, что может быть полезно Golang разработчику. По всем вопросам @evgenycarter
Download Telegram
Логирование программ Go

Журнал пакетов стандартной библиотеки предоставляет базовую инфраструктуру для управления логами на языке GO. Основная цель ведения логов — отследить, что происходит в программе, где это происходит и когда это происходит. Логи могут обеспечивать отслеживание кода, профилирование и аналитику. Ведение журнала логирования( глаза и уши программиста) — это способ найти эти ошибки и узнать больше о том, как работает программа. Далее

👉 @golang_lib
👍2
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
👍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
👍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
👍2
Как сделать api на golang?

Вы можете использовать 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
Telegram Бот на Golang

Обзор проекта
Проектируем Архитектуру Telegram Бота
Разработка API Клиента (SDK библиотеки)
Базовая структура проекта
Генерируем ссылку авторизации
Сервер авторизации. Подключаем BoltDB
Система конфигов и обработка ошибок
Деплоймент. DigitalOcean. CI/CD

👉 @golang_lib
👍2
Go и плагины

Go многими воспринимается как средство для написания микросервисов, тем не менее, сам он является языком общего назначения и позволяет писать приложения любого рода, в том числе, поддерживающие модули расширения.

Примерно год назад передо мной встала задача добавить поддержку плагинов в приложение на Go. Задача стояла не особо остро, и руки до решения дошли только сейчас. Ответ, однако, оказался не столь очевидным, сколь хотелось бы. Идеального решения, как по мне, нет, поэтому попытаюсь максимально объективно рассмотреть все три имеющихся.

👉 @golang_lib
👍2
В этой статье представлено TimingWheel в go-zero, которое позволяет разработчикам планировать множество отложенных задач.

https://faun.pub/implement-a-timing-wheel-for-millions-of-concurrent-tasks-942c8d9e4abe

👉 @golang_lib
👍1
Adam_Woodbeck_Network_Programming_with_Go_Learn_to_Code_Secure_and.pdf
3.9 MB
Network Programming with Go: Code Secure and Reliable Network Services from Scratch
Автор: Adam Woodbeck (2021)

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

Кроме того, вы узнаете фундаментальные основы TCP/IP, методы обеспечения надежности связи на уровне сокетов, способы использования обработчиков и middleware, инструменты для включения аутентификации и шифрования в приложения с использованием TLS, методы сериализации данных для хранения или передачи данных, подходы к настройке приложения для работы в облаке и многое другое.

👉 @golang_lib
👍2