Пакеты os и filepath
Переменные окружения, пути и взаимодействие с OS
«Пакеты os и filepath» — бесплатный урок Go Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
os.Args — аргументы командной строки
os.Args содержит аргументы командной строки. os.Args[0] — имя программы:
package main
import ("fmt"; "os")
func main() {
fmt.Println("Program:", os.Args[0])
if len(os.Args) < 2 {
fmt.Println("Usage: program <name>")
os.Exit(1)
}
fmt.Printf("Hello, %s!\n", os.Args[1])
}os.Getenv и os.Setenv
Читайте и изменяйте переменные окружения:
package main
import ("fmt"; "os")
func main() {
// Read env var (returns "" if not set)
home := os.Getenv("HOME")
fmt.Println("HOME:", home)
// Set env var
os.Setenv("APP_ENV", "production")
fmt.Println(os.Getenv("APP_ENV")) // production
// Get with default pattern:
port := os.Getenv("PORT")
if port == "" { port = "8080" }
fmt.Println("Port:", port)
}os.Exit — завершение программы
os.Exit завершает программу с кодом состояния. Код 0 означает успех, ненулевой код — ошибку. Отложенные функции NOT выполняются:
package main
import ("fmt"; "os")
func main() {
config := os.Getenv("CONFIG_PATH")
if config == "" {
fmt.Fprintln(os.Stderr, "error: CONFIG_PATH not set")
os.Exit(1) // signals error to the shell
}
fmt.Println("config:", config)
}os.Open, os.Create, os.ReadFile
Операции с файлами с помощью пакета os:
package main
import ("fmt"; "os")
func main() {
// Read entire file
data, err := os.ReadFile("/etc/hostname")
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("hostname: %s", data)
// Write file (overwrites if exists)
err = os.WriteFile("/tmp/test.txt", []byte("hello\n"), 0644)
fmt.Println("write err:", err)
}os.Stat — сведения о файле
os.Stat возвращает сведения о файле или каталоге:
package main
import ("fmt"; "os")
func main() {
info, err := os.Stat("/tmp")
if err != nil {
if os.IsNotExist(err) {
fmt.Println("does not exist")
}
return
}
fmt.Println(info.Name()) // tmp
fmt.Println(info.IsDir()) // true
fmt.Println(info.Size()) // size in bytes
fmt.Println(info.Mode()) // file permissions
fmt.Println(info.ModTime()) // last modified time
}os.MkdirAll и os.RemoveAll
Создавайте и удаляйте деревья каталогов:
package main
import ("fmt"; "os")
func main() {
// Create nested directories
err := os.MkdirAll("/tmp/myapp/data/logs", 0755)
fmt.Println("mkdir:", err)
// Remove a file
err = os.Remove("/tmp/test.txt")
fmt.Println("remove:", err)
// Remove directory and all contents
err = os.RemoveAll("/tmp/myapp")
fmt.Println("removeAll:", err)
}path/filepath: кроссплатформенные пути
path/filepath обрабатывает пути к файлам с использованием разделителя путей ОС (/ в Unix, \ в Windows):
package main
import ("fmt"; "path/filepath")
func main() {
// Join path components correctly
p := filepath.Join("/home", "user", "docs", "file.txt")
fmt.Println(p) // /home/user/docs/file.txt
// Split path and file
dir, file := filepath.Split(p)
fmt.Println(dir, file) // /home/user/docs/ file.txt
// Extension
fmt.Println(filepath.Ext(p)) // .txt
// Base name
fmt.Println(filepath.Base(p)) // file.txt
}filepath.Walk — обход каталогов
Обойдите дерево каталогов, посетив каждый файл и каталог:
package main
import ("fmt"; "os"; "path/filepath")
func main() {
err := filepath.Walk("/tmp", func(path string, info os.FileInfo, err error) error {
if err != nil { return err }
if info.IsDir() {
fmt.Println("[DIR]", path)
} else {
fmt.Printf("[FILE] %s (%d bytes)\n", path, info.Size())
}
return nil
})
if err != nil { fmt.Println("walk error:", err) }
}filepath.Glob — сопоставление с шаблоном
Найдите файлы, соответствующие шаблону glob:
package main
import ("fmt"; "path/filepath")
func main() {
// Find all .go files in current directory
matches, err := filepath.Glob("*.go")
if err != nil {
fmt.Println(err)
return
}
for _, m := range matches {
fmt.Println(m)
}
// Absolute path resolution
abs, _ := filepath.Abs("../myfile.txt")
fmt.Println(abs)
}os.TempDir и os.CreateTemp
Безопасно создавайте временные файлы:
package main
import ("fmt"; "os")
func main() {
// System temp directory
fmt.Println(os.TempDir()) // /tmp
// Create a unique temp file
f, err := os.CreateTemp("", "myapp-*.json")
if err != nil {
fmt.Println(err)
return
}
defer os.Remove(f.Name()) // clean up
defer f.Close()
fmt.Println("temp file:", f.Name())
_, _ = f.WriteString(`{"status":"ok"}`)
}Краткая проверка
Какая функция правильно объединяет компоненты пути к файлу кроссплатформенным способом?
Повторение: os и filepath
Краткое содержание:
os.Args— аргументы командной строки;os.Getenv/Setenv— окружениеos.ReadFile/WriteFileдля простого ввода-вывода файловos.Stat— сведения о файле;os.IsNotExist(err)для отсутствующих файловos.MkdirAll/RemoveAllдля управления каталогамиfilepath.Join/Split/Ext/Baseдля кроссплатформенных путейfilepath.Walkдля обхода деревьев каталогов
Часто задаваемые вопросы
Урок «Пакеты os и filepath» бесплатный?
Да — полный текст урока «Пакеты os и filepath» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Пакеты os и filepath»?
Переменные окружения, пути и взаимодействие с OS Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Пакеты os и filepath»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Пакеты fmt и strings
- strconv, math и sort
- Основы пакета time
- Пакеты os и filepath