Вот первая идея, которая приходит в голову; тут используются регулярные выражения:
import (
"regexp"
)
func main() {
str := "Некая строка c кириллическими символами"
re := regexp.MustCompile("[А-Яа-я]+?") //проверяем на киррилические символы
isRussian := re.MatchString(str)
if isRussian {
...
}
}
Есть ли более эффективный способ узнать, на каком языке написана строка? Языков только два - русский и английский.
func IsEngByLoop(str string) bool {
for i := 0; i < len(str); i++ {
if str[i] > unicode.MaxASCII {
return false
}
}
return true
}
Раз мы уверены, что имеем дело только с 2 языками, то достаточно определить, являются ли все символы строки ASCII символами. Если да, то строка написана на Английском, если нет - то на каком-то другом (в вашем случае, это Русский).
Вот и все дела
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🥴4❤2🔥2👏2😁1🤣1
package main
import "fmt"
func main() {
slice := []int{1}
fmt.Println(slice[1:])
}
Мы ведь обращаемся к элементу слайса с индексом 1, которого нет
Вот цитата:
"For arrays or strings, the indices are in range if 0 <= low <= high <= len(a), otherwise they are out of range. For slices, the upper index bound is the slice capacity cap(a) rather than the length."
Особенно важно последнее предложение
Ну и небольшой пример для полного понимания:
package main
import "fmt"
func main() {
slice := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
slice1 := slice[5:6]
slice2 := slice1[1:10]
fmt.Println(slice1, slice2, cap(slice2), len(slice2))
}
Подробнее
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤5🔥5
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