Repeater
, Controller
и Executor
.Также нужно сделать 1 модуль, который они будут импортировать с некоторым набором общих для них функций.
Как организовать структуру такого проекта?
main.go
под каждый сервис. Кладём их каждый в свою подпапку в директории, например cmd
.А для общих библиотек используем отдельную директорию, например
pkg
, и будем импортировать отсюда функционал во все 3 сервиса.cmd/
repeater/
main.go
controller/
main.go
executor/
main.go
pkg/
c-library/
clibrary.go
go.mod
go build ./cmd/repeater
go build ./cmd/controller
go build ./cmd/executor
main.go
:package main
import c_library "test/pkg/c-library"
func main() {
c_library.HelloWorld()
}
package c_library
import "fmt"
func HelloWorld() {
fmt.Println("HELLO WORLD")
}
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🥱7❤3🥰2🌚2
Вот неплохая статья, которая обсуждает параллельные вычисления на одном процессоре и масштабирование с ограничением количества одновременных запросов.
Рекомендуется использовать первый паттерн для выполнения параллельных вычислений без ограничений с использованием
errgroup
.Если возможен бесконтрольный рост удаленных запросов, следует ограничить одновременное выполнение и подобрать лимит опытным путем.
Ну и для ускорения сложных вычислений можно использовать
runtime.NumCPU
в качестве лимита для распараллеливания на все ядра процессора.@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3🔥2😁1
Держите годный контент
Это будет не игрушечный проект, а полностью готовый к использованию:
— для него будет выбран актуальный http-роутер
— важное место отведено о логам
— будут написаны тесты: unit-тесты, тесты хэндлеров и функциональные
— будет настроен автоматический деплой через GitHub Actions и др.
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤5🔥4❤🔥1
⚡️ 4 Репозитория на Github для подготовки к 4 различным типам собеседований по разработке программного обеспечения:
1. Собеседования по системному дизайну: https://github.com/ashishps1/awesome-system-design-resources
2. Собеседования по низкоуровневому проектированию: https://github.com/ashishps1/awesome-low-level-design
3. Собеседования по программированию: https://github.com/ashishps1/awesome-leetcode-resources
4. Поведенческое собеседование: https://github.com/ashishps1/awesome-behavioral-interviews
@golang_interview
1. Собеседования по системному дизайну: https://github.com/ashishps1/awesome-system-design-resources
2. Собеседования по низкоуровневому проектированию: https://github.com/ashishps1/awesome-low-level-design
3. Собеседования по программированию: https://github.com/ashishps1/awesome-leetcode-resources
4. Поведенческое собеседование: https://github.com/ashishps1/awesome-behavioral-interviews
@golang_interview
🔥12❤3👍2
То есть на основании слайса целых чисел, мы должны получать
map[int]int
, где по ключу int
хранится количество этого числа. Идея очень проста, можете написать и сверить себя)
Ну как?
#junior
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤4🔥4🌭4
Держите полезный ресурс, здесь показана большая часть того, что понадобится в реальной работе с Go: структуры, интерфейсы, создание своего веб-сервера, межсайтовый скриптинг, работа с БД и много всего ещё.
Очень полезно, рекомендую
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥8🥰3
Forwarded from Golang
Мощная шпаргалка по Go, которая покрывает практически все темы
Если пролистать хотя бы по диагонали, есть отличный от нуля шанс пройти собеседование и получить оффер)
Что внутри?
├╼
Компилятор├╼
Пакеты├╼
Функции├╼
Управление памятью├╼
Операторы├╼
Управляющие структуры├╼
Объектноориентированность├╼
Интерфейсы├╼
Обработка ошибок├╼
Горутины (Goroutine)├╼
Проверка управления памятью├╼
Reflect ├╼
Добавление кода C├╼
GUI╰╼
Распределенные системы@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤6👍4
Итак, задача: написать свою фукнцию
sleep
time.After
, вот так:package main
import (
"log"
"time"
)
func sleep(d time.Duration) {
select {
case <-time.After(d):
}
}
func CallSleep() {
log.Println("Do something")
sleep(5 * time.Second)
log.Println("Something else")
}
Но выглядит как-то громоздко, да и вообще.
func sleep2(d time.Duration) time.Time {
ticker := time.Tick(d)
for done := range ticker {
return done
}
return time.Now()
}
func sleep(d time.Duration) {
<-time.After(d)
}
Ну вот, то, что нужно
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍5🥱5❤4🤔1
network_api -> data(UseCase->Repository)
. Так как все
http
хендлеры обрабатываются параллельно, то каким образом корректно протянуть зависимости репозиториев и use_case
объектов в слой network_api
? То есть это будут синглтоны или же их нужно создавать для каждого отдельного request
? Что насчёт доступа к общим ресурсам?
Например,
use_case
при загрузке читает json
-конфигурацию и в дальнейшем к ней обращается по многим путям из слоя nwtwork_api
.Есть какие нибудь best practices?
Если наши данные терпимы к параллельному одновременному доступу — тогда можно не замарачиваться. Если же нельзя одновременно из нескольких потоков обращаться к менеджеру данных — тогда стоит ввести глобальную блокировку. Фактически, такой глобальной блокировкой будет являться единственное соединение к базе данных.
Вот и всё, пожалуй
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤4👍4😢2🌚2❤🔥1
Держите полезную статью о тестировании Go-приложений
Что внутри?
ExecuteTest
, передавая контекст и testing.TB
или provider.T
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥5❤4❤🔥1
Но если ты посмотришь это видео, то будешь знать ответы, и во всеоружии встретишь такие вопросы, если они попадутся
Уверен, будет полезно)
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3❤🔥3🔥1
var _ myInterface = &myImplementation{}
:type T struct{}
var _ I = T{} // Проверка, что T имплеменирует I.
var _ I = (*T)(nil) // Проверка, что *T имплеменирует I.
Обычно это указывают, чтобы ошибки были выявлены уже во время компиляции.
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤2🔥2
Держите годный контент)
Тут неплохой список тем, которые с большой вероятностью будут обсуждаться на собеседовании + теория по самому важному
Собственно, теория покрывает такие разделы:
├╼
Скалярные├╼
Массив и слайс├╼
Map├╼
Структура╰╼
Интерфейс├╼
Каналы├╼
Горутины├╼
Sync╰╼
ПаттерныУверен, будет полезно) Успешных собеседований
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍4🔥2