Приложения
#
Для завершения книги полезно включить приложения, которые помогут читателю быстро находить важную информацию и избегать распространенных ошибок.
Таблица стандартных библиотек
#
Библиотека | Описание |
---|
fmt | Форматированный ввод/вывод, печать и сканирование. |
os | Работа с операционной системой: файлы, переменные окружения, процессы. |
io , io/ioutil | Потоковый ввод/вывод, чтение и запись данных. |
strings | Манипуляции со строками (поиск, замена, разбиение и т.д.). |
strconv | Преобразование строк в числа и наоборот. |
time | Работа с временем, таймерами и форматированием дат. |
net/http | Создание HTTP-серверов и клиентов. |
encoding/json | Работа с JSON: кодирование и декодирование. |
sync | Примитивы синхронизации (мьютексы, WaitGroup). |
math/rand | Генерация случайных чисел. |
context | Управление временем выполнения и отменой горутин. |
database/sql | Работа с реляционными базами данных. |
log | Логирование с поддержкой форматирования и уровней. |
testing | Написание тестов и бенчмарков. |
Типовые ошибки и их исправления
#
Ошибка | Причина | Исправление |
---|
fatal error: all goroutines are asleep - deadlock! | Мертвый блок, например, из-за закрытого канала или отсутствия получателя. | Убедитесь, что каналы правильно закрыты, и данные считываются. |
nil pointer dereference | Попытка обратиться к nil указателю или полю структуры. | Проверьте, инициализирована ли переменная перед использованием. |
index out of range | Выход за пределы массива или среза. | Убедитесь, что индекс находится в допустимом диапазоне. |
imported but not used | Импортирован пакет, но не используется в коде. | Удалите неиспользуемые импорты или используйте пакет. |
declared and not used | Объявлена, но не используется переменная. | Удалите переменную или начните ее использовать. |
undefined: xxx | Попытка использования несуществующего идентификатора. | Проверьте правильность имен и наличие импорта пакета. |
assignment to entry in nil map | Попытка изменить неинициализированную карту. | Инициализируйте карту с помощью make . |
Ошибки при go mod tidy | Конфликты зависимостей или отсутствие модуля. | Проверьте файл go.mod и версию зависимости, добавьте недостающие модули вручную. |
Полезные шаблоны кода
#
Обработка ошибок
#
if err != nil {
log.Fatalf("Произошла ошибка: %v", err)
}
Работа с каналами и WaitGroup
#
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done()
fmt.Printf("Worker %d starting\n", id)
fmt.Printf("Worker %d done\n", id)
}
func main() {
var wg sync.WaitGroup
for i := 1; i <= 3; i++ {
wg.Add(1)
go worker(i, &wg)
}
wg.Wait()
}
Чтение файла
#
package main
import (
"fmt"
"io/ioutil"
)
func main() {
data, err := ioutil.ReadFile("example.txt")
if err != nil {
fmt.Println("Ошибка чтения файла:", err)
return
}
fmt.Println(string(data))
}
Отправка HTTP-запроса
#
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
resp, err := http.Get("https://api.example.com/data")
if err != nil {
fmt.Println("Ошибка запроса:", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Ошибка чтения ответа:", err)
return
}
fmt.Println(string(body))
}
Запуск таймера
#
package main
import (
"fmt"
"time"
)
func main() {
timer := time.NewTimer(2 * time.Second)
<-timer.C
fmt.Println("Timer expired")
}