Golang, или Go, завоевал популярность среди разработчиков благодаря своей производительности, простоте и эффективности. Он прекрасно подходит для решения широкого спектра задач, от разработки облачных сервисов до создания сетевых инструментов. Если вы начинающий разработчик на Go, этот гайд предоставит вам пять практических проектов, которые помогут закрепить знания и начать решать реальные задачи. Все проекты рассчитаны на новичков, но при этом достаточного сложны, чтобы вы по-настоящему чему-то научиться.
-
Простой веб-сервер
Начнем с базового проекта: веб-сервер, который отвечает на HTTP запросы. Это отличный способ понять, как Golang работает с сетевым взаимодействием.

package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Привет, мир! Ты зашел на страницу: %s\n", r.URL.Path)
}
func main() {
http.HandleFunc("/", handler)
fmt.Println("Сервер запущен на порту 8080")
http.ListenAndServe(":8080", nil)
}
Этот код создает простой HTTP-сервер, который отвечает на запросы к корневой странице (“/”). Функция
handler
получает запрос и записывает сообщение в ответ. Функция
main
регистрирует обработчик для корневой страницы и запускает сервер на порту
8080
. Запустите код и откройте в браузере
http://localhost:8080/
.
-
CLI-инструмент для обработки данных
Следующий проект – CLI-инструмент, который читает файл, обрабатывает данные и выводит результат. Это поможет вам научиться работать с файлами, аргументами командной строки и структурами данных.

package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
if len(os.Args) != 5 {
fmt.Println("Использование: go run main.go <input_file> <output_file> <operation> <multiplier>")
return
}
inputFile := os.Args[1]
outputFile := os.Args[2]
operation := os.Args[3]
multiplierStr := os.Args[4]
multiplier, err := strconv.Atoi(multiplierStr)
if err != nil {
fmt.Println("Ошибка преобразования множителя:", err)
return
}
file, err := os.Open(inputFile)
if err != nil {
fmt.Println("Ошибка открытия файла:", err)
return
}
defer file.Close()
outputFile, err := os.Create(outputFile)
if err != nil {
fmt.Println("Ошибка создания файла:", err)
return
}
defer outputFile.Close()
scanner := bufio.NewScanner(file)
writer := bufio.NewWriter(outputFile)
for scanner.Scan() {
line := scanner.Text()
num, err := strconv.Atoi(line)
if err == nil {
result := num * multiplier
_, err := fmt.Fprintln(writer, result)
if err != nil {
fmt.Println("Ошибка записи в файл:", err)
return
}
} else {
_, err := fmt.Fprintln(writer, line)
if err != nil {
fmt.Println("Ошибка записи в файл:", err)
return
}
}
}
err = writer.Flush()
if err != nil {
fmt.Println("Ошибка записи в файл:", err)
return
}
}
Этот скрипт принимает имя входного файла, имя выходного файла, тип операции (“умножение” или что-то другое, чтобы просто скопировать строку), и множитель в качестве аргументов командной строки. Он читает каждую строку входного файла, пытается преобразовать ее в число. Если преобразование удается, умножает число на множитель и записывает результат в выходной файл. Если преобразование не удается, записывает исходную строку в выходной файл.
3. Простой API для управления задачами
Разработайте простой API, который позволяет создавать, читать, обновлять и удалять задачи. Это познакомит вас с базовыми принципами RESTful API и работой с данными.

Для простоты, задачи можно хранить в памяти. Используйте библиотеки, такие как
net/http
и
encoding/json
.
4. Парсер логов
Создайте инструмент, который парсит файлы логов, извлекает информацию и предоставляет сводку. Это поможет вам научиться работать со строками, регулярными выражениями и структурами данных.

Вы можете использовать регулярные выражения для извлечения нужных данных из каждой строки лога. Например, можно извлечь временную метку, уровень логирования и сообщение.
-
Простой чат-сервер
Создайте простой чат-сервер, который позволяет нескольким пользователям общаться друг с другом. Это познакомит вас с concurrency и сетевым программированием.

Используйте
net
пакет для создания сокетов и обработки подключений. Обратите внимание на вопросы синхронизации и обработки ошибок.
Эти проекты представляют собой хороший старт для изучения Golang. Они охватывают широкий спектр задач и дают возможность применить свои знания на практике. Не бойтесь экспериментировать и модифицировать код, чтобы лучше понять, как все работает. Помните, что лучший способ научиться – это делать!
Удачи в ваших начинаниях!
#Golang #Go #Программирование #РеальныеПроекты #Обучение #Разработка #Backend #API #CLI #ВебРазработка
Добавить комментарий