🤔 Как в Go добавить элемент value в начало среза list?
Anonymous Quiz
0%
list.prepend(value)
9%
prepend(list, value)
82%
list = append([]int{value}, list...)
9%
list.prepend(value)
#ЧеКак
🤔 Что возвращает оператор "квадратные скобки" для строки ?
Оператор "квадратные скобки" (
🚩 Объяснение
1⃣ Доступ к байту
В этой строке кода мы получаем байт, расположенный по индексу
2⃣ Вывод байта в числовом формате
Здесь мы выводим байт в виде целого числа. Поскольку символ 'h' имеет ASCII-код 104, вывод будет
3⃣ Вывод байта как символа
Мы также можем вывести байт как символ, используя формат
🚩 Работа с Unicode
Важно понимать, что строки являются последовательностями байтов, а не символов. Это означает, что доступ по индексу с помощью
Для корректной работы с многобайтовыми символами (рунами) в строках используется преобразование строки в срез рун
👉 Новости 👉 Платформа
Оператор "квадратные скобки" (
[]
) при применении к строке используется для доступа к отдельным байтам в этой строке. Строки представлены как последовательности байтов, и оператор []
позволяет получить байт по указанному индексу. package main
import (
"fmt"
)
func main() {
str := "hello"
// Получаем байт по индексу
firstByte := str[0]
// Выводим байт и его символ
fmt.Printf("Первый байт: %d\n", firstByte) // Выводит: 104
fmt.Printf("Первый символ: %c\n", firstByte) // Выводит: h
}
В этой строке кода мы получаем байт, расположенный по индексу
0
в строке str
. В данном случае это байт, соответствующий символу 'h'.firstByte := str[0]
Здесь мы выводим байт в виде целого числа. Поскольку символ 'h' имеет ASCII-код 104, вывод будет
104
.fmt.Printf("Первый байт: %d\n", firstByte)
Мы также можем вывести байт как символ, используя формат
%c
. Это отобразит символ 'h'.fmt.Printf("Первый символ: %c\n", firstByte)
Важно понимать, что строки являются последовательностями байтов, а не символов. Это означает, что доступ по индексу с помощью
[]
дает байт, а не руну (rune). Если строка содержит многобайтовые символы (например, символы Unicode), то доступ по индексу может вернуть только один из байтов, составляющих символ.package main
import (
"fmt"
)
func main() {
str := "Привет"
// Получаем байт по индексу
firstByte := str[0]
// Выводим байт и его символ
fmt.Printf("Первый байт: %d\n", firstByte) // Выводит: 208
fmt.Printf("Первый символ: %c\n", firstByte) // Выводит: � (неполный символ)
}
Для корректной работы с многобайтовыми символами (рунами) в строках используется преобразование строки в срез рун
package main
import (
"fmt"
)
func main() {
str := "Привет"
// Преобразуем строку в срез рун
runes := []rune(str)
// Получаем руну по индексу
firstRune := runes[0]
// Выводим руну и её символ
fmt.Printf("Первая руна: %d\n", firstRune) // Выводит: 1055 (код Unicode для 'П')
fmt.Printf("Первый символ: %c\n", firstRune) // Выводит: П
}
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Как в Go объявить метод UpdateName для структуры User?
Anonymous Quiz
83%
func (u *User) UpdateName(name string)
8%
method UpdateName(u User, name string)
8%
func UpdateName(u *User, name string)
0%
method (u *User) UpdateName(name string)
Please open Telegram to view this post
VIEW IN TELEGRAM
#Вакансии
👨💻 Senior Go Developer (Marketing)
Локация: Удаленно
Компания: Emerging Travel Group
ЗП: обсуждается на собеседовании
Занятость: Полная
▫ 4+ года опыта, 2+ года опыта с Go, SQL и NoSQL databases, English B1
Emerging Travel Group – travel-tech компания с продуктами в сегментах b2c, b2a, b2b (RateHawk, Roundtrip, ZenHotels), которые помогают клиентам управлять всеми потреброностями в путешествиях.
Узнать подробнее: тут
💬 Резюме отправлять: @Alyon_A
👉 Новости 👉 Платформа
Локация: Удаленно
Компания: Emerging Travel Group
ЗП: обсуждается на собеседовании
Занятость: Полная
Emerging Travel Group – travel-tech компания с продуктами в сегментах b2c, b2a, b2b (RateHawk, Roundtrip, ZenHotels), которые помогают клиентам управлять всеми потреброностями в путешествиях.
Узнать подробнее: тут
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЧеКак
🤔 Что будет, если подставить переменную в массив?
Если переменную подставить как индекс, будет доступ к соответствующему элементу массива. Если переменная подставляется как значение, она становится одним из элементов массива. Некорректное использование может привести к ошибкам компиляции или выполнения.
👉 Новости 👉 Платформа
Если переменную подставить как индекс, будет доступ к соответствующему элементу массива. Если переменная подставляется как значение, она становится одним из элементов массива. Некорректное использование может привести к ошибкам компиляции или выполнения.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое интерфейс в языке программирования Go?
Anonymous Quiz
18%
Структура данных для хранения пары ключ-значение.
59%
Механизм для описания поведения объекта.
24%
Оператор для объявления методов.
0%
Тип данных для хранения дробных чисел.
#ЧеКак
🤔 Что будет, если подставить переменную в массив?
Массивы и слайсы могут использоваться для хранения последовательности элементов одного типа. Когда вы "подставляете" переменную в массив или слайс, вы просто присваиваете значение этой переменной одному из элементов массива или слайса.
Пример с массивом
🚩 Объяснение
1⃣ Создание массива
Это создает массив
2⃣ Создание переменной
Создаем переменную
3⃣ Присваивание значения элементу массива
Присваиваем значение переменной
4⃣ Вывод массива
Выводит содержимое массива, показывая, что первый элемент массива теперь равен
Пример со слайсом
🚩 Объяснение
1⃣ Создание слайса
Это создает слайс
2⃣ Создание переменной
Создаем переменную
3⃣ Присваивание значения элементу слайса
Присваиваем значение переменной
4⃣ Вывод слайса
Выводит содержимое слайса, показывая, что второй элемент слайса теперь равен
👉 Новости 👉 Платформа
Массивы и слайсы могут использоваться для хранения последовательности элементов одного типа. Когда вы "подставляете" переменную в массив или слайс, вы просто присваиваете значение этой переменной одному из элементов массива или слайса.
Пример с массивом
package main
import "fmt"
func main() {
// Создаем массив из 5 целых чисел
var arr [5]int
// Создаем переменную и присваиваем ей значение
x := 10
// Подставляем переменную в массив
arr[0] = x
// Выводим массив
fmt.Println(arr) // Выводит: [10 0 0 0 0]
}
Это создает массив
arr
из 5 целых чисел, все элементы которого инициализируются значением 0
.var arr [5]int
Создаем переменную
x
и присваиваем ей значение 10
.x := 10
Присваиваем значение переменной
x
первому элементу массива arr
.arr[0] = x
Выводит содержимое массива, показывая, что первый элемент массива теперь равен
10
, а остальные элементы остаются нулями.fmt.Println(arr)
Пример со слайсом
package main
import "fmt"
func main() {
// Создаем слайс из 3 целых чисел
slice := make([]int, 3)
// Создаем переменную и присваиваем ей значение
x := 20
// Подставляем переменную в слайс
slice[1] = x
// Выводим слайс
fmt.Println(slice) // Выводит: [0 20 0]
}
Это создает слайс
slice
из 3 целых чисел, все элементы которого инициализируются значением 0
.slice := make([]int, 3)
Создаем переменную
x
и присваиваем ей значение 20
.x := 20
Присваиваем значение переменной
x
второму элементу слайса slice
.slice[1] = x
Выводит содержимое слайса, показывая, что второй элемент слайса теперь равен
20
, а остальные элементы остаются нулями.fmt.Println(slice)
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЧеКак
🤔 Что такое zero-value и какое оно у слайса ?
Концепция "нулевого значения" (zero-value) означает значение по умолчанию, которое получает переменная при ее объявлении, если она не была инициализирована явно. Нулевые значения зависят от типа данных переменной.
🟠 int
0
🟠 float64
0.0
🟠 bool
false
🟠 string
""
🟠 указатели, интерфейсы, функции, каналы, карты, слайсы
🚩 Нулевое значение (zero-value) для слайса
Является
Нулевое значение для слайса
🚩 Работа с нулевым значением
Можно работать так же, как и с обычным слайсом. Например, можно добавлять элементы с помощью функции
Использование
👉 Новости 👉 Платформа
Концепция "нулевого значения" (zero-value) означает значение по умолчанию, которое получает переменная при ее объявлении, если она не была инициализирована явно. Нулевые значения зависят от типа данных переменной.
0
0.0
false
""
nil
Является
nil
. Это означает, что слайс, объявленный, но не инициализированный явно, указывает на nil
и имеет длину и емкость равные нулю.Нулевое значение для слайса
package main
import "fmt"
func main() {
var slice []int // Объявление слайса без инициализации
fmt.Println(slice) // []
fmt.Println(len(slice)) // 0
fmt.Println(cap(slice)) // 0
fmt.Println(slice == nil) // true
}
Можно работать так же, как и с обычным слайсом. Например, можно добавлять элементы с помощью функции
append
, и это будет работать корректно.Использование
append
с nil
-слайсомpackage main
import "fmt"
func main() {
var slice []int // nil-слайс
// Добавление элемента в nil-слайс
slice = append(slice, 1)
fmt.Println(slice) // [1]
fmt.Println(len(slice)) // 1
fmt.Println(cap(slice)) // 1
fmt.Println(slice == nil) // false (теперь слайс больше не nil)
}
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЧеКак
🤔 Как думаешь, будут ли Map ordered?
Нет, в большинстве языков (например, Go) Map не гарантирует порядка хранения элементов.
🟠 Хранение данных зависит от хеширования ключей, что делает порядок непредсказуемым.
🟠 Если нужен упорядоченный Map, используйте структуру, где порядок задаётся вручную, например, с помощью slice.
👉 Новости 👉 Платформа
Нет, в большинстве языков (например, Go) Map не гарантирует порядка хранения элементов.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Как в Go добавить новую зависимость github.com/example/module в файл go.mod?
Anonymous Quiz
15%
go mod add github.com/example/module
60%
go get github.com/example/module
20%
go mod update github.com/example/module
5%
go install github.com/example/module
#ЧеКак
🤔 Как устроен слайс в Go ?
Слайсы представляют собой мощный и гибкий инструмент для работы с последовательностями элементов. Основаны на массивах, но они предоставляют более удобный и динамичный способ работы с данными.
🚩 Структура
🟠 Указатель на базовый массив
Указатель на первый элемент массива, на который ссылается слайс.
🟠 Длина (length)
Количество элементов, доступных в слайсе.
🟠 Емкость (capacity)
Максимальное количество элементов, которое может содержать слайс без перераспределения памяти.
🚩 Внутреннее устройство
Можно представить в виде структуры
🟠 Слайс из массива
Можно создать из массива, указав диапазон элементов:
🟠 Слайс с использованием функции make
Позволяет создать слайс определенной длины и емкости:
🟠 Доступ к элементам слайса
Осуществляется так же, как и к элементам массива:
🚩 Основные операции с ними
🟠 Добавление элементов
Для этого используется функция
🟠 Извлечение подмножества слайса (slicing)
Можно создавать новые слайсы на основе существующих
🟠 Копирование слайсов
Для этого используется функция
🚩 Динамическое изменение длины и емкости
Могут автоматически изменять свою емкость при добавлении новых элементов с помощью
👉 Новости 👉 Платформа
Слайсы представляют собой мощный и гибкий инструмент для работы с последовательностями элементов. Основаны на массивах, но они предоставляют более удобный и динамичный способ работы с данными.
Указатель на первый элемент массива, на который ссылается слайс.
Количество элементов, доступных в слайсе.
Максимальное количество элементов, которое может содержать слайс без перераспределения памяти.
Можно представить в виде структуры
type slice struct {
ptr *ElementType // Указатель на базовый массив
len int // Длина
cap int // Емкость
}
Можно создать из массива, указав диапазон элементов:
package main
import "fmt"
func main() {
arr := [5]int{1, 2, 3, 4, 5}
slice := arr[1:4] // Слайс содержит элементы с индексами 1, 2, 3
fmt.Println(slice) // [2 3 4]
}
Позволяет создать слайс определенной длины и емкости:
package main
import "fmt"
func main() {
slice := make([]int, 3, 5) // Слайс длиной 3 и емкостью 5
fmt.Println(slice) // [0 0 0]
}
Осуществляется так же, как и к элементам массива:
package main
import "fmt"
func main() {
slice := []int{1, 2, 3, 4, 5}
fmt.Println(slice[0]) // 1
slice[1] = 10
fmt.Println(slice) // [1 10 3 4 5]
}
Для этого используется функция
append
package main
import "fmt"
func main() {
slice := []int{1, 2, 3}
slice = append(slice, 4, 5) // Добавляем элементы 4 и 5 в конец слайса
fmt.Println(slice) // [1 2 3 4 5]
}
Можно создавать новые слайсы на основе существующих
package main
import "fmt"
func main() {
slice := []int{1, 2, 3, 4, 5}
subSlice := slice[1:4] // Слайс содержит элементы с индексами 1, 2, 3
fmt.Println(subSlice) // [2 3 4]
}
Для этого используется функция
copy
package main
import "fmt"
func main() {
src := []int{1, 2, 3}
dst := make([]int, len(src))
copy(dst, src)
fmt.Println(dst) // [1 2 3]
}
Могут автоматически изменять свою емкость при добавлении новых элементов с помощью
append
. Когда емкость текущего массива недостаточна для добавления новых элементов, создается новый массив с большей емкостью, в который копируются существующие элементы.package main
import "fmt"
func main() {
slice := make([]int, 3, 5)
fmt.Println("Before append:", slice, "Len:", len(slice), "Cap:", cap(slice))
slice = append(slice, 1, 2, 3)
fmt.Println("After append:", slice, "Len:", len(slice), "Cap:", cap(slice))
slice = append(slice, 4)
fmt.Println("After another append:", slice, "Len:", len(slice), "Cap:", cap(slice))
}
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой пакет в Go предоставляет примитивы для синхронизации, такие как WaitGroup и Mutex?
Anonymous Quiz
81%
sync
15%
time
4%
math
0%
fmt
#Собес
🤔 Что такое замыкания функций в контексте Go?
Замыкание функции - это функция, которая захватывает и использует переменные из
окружающего контекста. Эти функции могут сохранять состояние между вызовами.
👉 Новости 👉 Платформа
Замыкание функции - это функция, которая захватывает и использует переменные из
окружающего контекста. Эти функции могут сохранять состояние между вызовами.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой метод встроенного пакета reflect в Go используется для получения типа переменной во время выполнения?
Anonymous Quiz
64%
reflect.TypeOf
0%
reflect.KindOf
16%
reflect.ValueOf
20%
reflect.GetType
#полезное
🏕 Жизненный цикл потоков ОС в Golang
Исследование производительности Go-приложений и влияния GOMAXPROCS на количество потоков.
Читать статью...
👉 Новости 👉 Платформа
Исследование производительности Go-приложений и влияния GOMAXPROCS на количество потоков.
Читать статью...
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Жизненный цикл потоков ОС в Golang
Всем привет! Меня зовут Паша, я занимаюсь коммерческой разработкой уже 10 лет, 8 из них — на Go. Мне довелось разрабатывать приложения, активно использующие как сеть, так и диск. Регулярно...
#ЛитКод
Задача: 672. Bulb Switcher II
Есть комната с n лампочками, пронумерованными от 1 до n, которые изначально все включены, и четыре кнопки на стене. Каждая из четырех кнопок имеет разную функциональность:
Кнопка 1: Переключает состояние всех лампочек.
Кнопка 2: Переключает состояние всех лампочек с четными номерами (т.е. 2, 4, ...).
Кнопка 3: Переключает состояние всех лампочек с нечетными номерами (т.е. 1, 3, ...).
Кнопка 4: Переключает состояние всех лампочек с номером j = 3k + 1, где k = 0, 1, 2, ... (т.е. 1, 4, 7, 10, ...).
Необходимо сделать ровно presses нажатий кнопок. Для каждого нажатия можно выбрать любую из четырех кнопок для нажатия.
Даны два целых числа n и presses, вернуть количество различных возможных состояний после выполнения всех presses нажатий кнопок.
Пример:
👨💻 Алгоритм:
1⃣ Рассчитаем возможные множества остатков: то есть какие множества c_i = f_i (mod 2) возможны.
2⃣ Так как c_i ≡ f_i и c_i ≤ f_i, если ∑f_i ≠ ∑c_i, или если ∑f_i < ∑c_i, это невозможно. В противном случае это возможно простым построением: выполните операции, указанные c_i, затем выполните операцию номер 1 с четным числом оставшихся операций.
3⃣ Для каждого возможного множества остатков симулируем и запоминаем, как будут выглядеть первые 6 лампочек, сохраняя это в структуре Set. В конце возвращаем размер этого множества.
😎 Решение:
👉 Новости 👉 Платформа
Задача: 672. Bulb Switcher II
Есть комната с n лампочками, пронумерованными от 1 до n, которые изначально все включены, и четыре кнопки на стене. Каждая из четырех кнопок имеет разную функциональность:
Кнопка 1: Переключает состояние всех лампочек.
Кнопка 2: Переключает состояние всех лампочек с четными номерами (т.е. 2, 4, ...).
Кнопка 3: Переключает состояние всех лампочек с нечетными номерами (т.е. 1, 3, ...).
Кнопка 4: Переключает состояние всех лампочек с номером j = 3k + 1, где k = 0, 1, 2, ... (т.е. 1, 4, 7, 10, ...).
Необходимо сделать ровно presses нажатий кнопок. Для каждого нажатия можно выбрать любую из четырех кнопок для нажатия.
Даны два целых числа n и presses, вернуть количество различных возможных состояний после выполнения всех presses нажатий кнопок.
Пример:
Input: n = 1, presses = 1
Output: 2
Explanation: Status can be:
- [off] by pressing button 1
- [on] by pressing button 2
func flipLights(n int, m int) int {
seen := make(map[int]struct{})
n = min(n, 6)
shift := max(0, 6-n)
for cand := 0; cand < 16; cand++ {
bcount := bits.OnesCount(uint(cand))
if bcount % 2 == m % 2 && bcount <= m {
lights := 0
if (cand>>0)&1 > 0 { lights ^= 0b111111 >> shift }
if (cand>>1)&1 > 0 { lights ^= 0b010101 >> shift }
if (cand>>2)&1 > 0 { lights ^= 0b101010 >> shift }
if (cand>>3)&1 > 0 { lights ^= 0b100100 >> shift }
seen[lights] = struct{}{}
}
}
return len(seen)
}
func min(a, b int) int {
if a < b {
return a
}
return b
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой тип данных в Go используется для создания канала, который повторно отправляет значения через регулярные интервалы времени?
Anonymous Quiz
58%
time.Ticker
9%
time.Clock
30%
time.Timer
3%
time.Stopwatch
#Собес
🤔 Что такое горутина? Как ее остановить?
Горутина - это легковесный поток выполнения, который запускается с помощью ключевого слова
👉 Новости 👉 Платформа
Горутина - это легковесный поток выполнения, который запускается с помощью ключевого слова
go
. Остановить горутину можно, отправив сигнал через канал (channel), который горутина должна проверять в своем коде.Please open Telegram to view this post
VIEW IN TELEGRAM