Golang

 Чтение файла

        read, _ := os.Open("./www/go/read.txt")

defer read.Close()

buffer := make([]byte, 1024)

n, _ := read.Read(buffer)

data := buffer[:n] // Прочитанные данные

fmt.Println(string(data))


Запись в файл

file, err := os.Create("./www/go/read.txt") // Создание или перезапись файла

if err != nil {

fmt.Println("Ошибка при создании файла:", err)

return

}

defer file.Close() // Закрытие файла в конце функции

data := []byte("Hello, World!") // Данные для записи

_, err = file.Write(data)       // Запись данных в файл

if err != nil {

fmt.Println("Ошибка при записи в файл:", err)

return

}

fmt.Println("Данные успешно записаны в файл.")

Запись в конец файла

file, err := os.OpenFile("./www/go/log.txt", os.O_APPEND|os.O_WRONLY, 0644)

if err != nil {

fmt.Println(err)

}

defer file.Close()

file.WriteString("Должно быть так: Hello, World!\n")

if err != nil {

fmt.Println(err)

}

Стандартный поток ввода (stdin) 

func main() {

buffer := make([]byte, 1024)

n, err := os.Stdin.Read(buffer)

if err != nil {

fmt.Println("Ошибка чтения из stdin:", err)

return

}


data := buffer[:n]

fmt.Println("Прочитанные данные:", string(data))

}

Стандартный поток вывода (stdout)

func main() {

message := "Привет, мир!"

_, err := os.Stdout.Write([]byte(message))

if err != nil {

fmt.Println("Ошибка записи в stdout:", err)

return

}

}

Стандартный поток ошибок (stderr) 

func main() {

errMessage := "Ошибка: некорректные данные!"

_, err := os.Stderr.WriteString(errMessage)

if err != nil {

fmt.Println("Ошибка записи в stderr:", err)

return

}

}

Буферизованное чтение из файла

func main() {

file, err := os.Open("file.txt")

if err != nil {

fmt.Println("Ошибка при открытии файла:", err)

return

}

defer file.Close()

scanner := bufio.NewScanner(file)

for scanner.Scan() {

line := scanner.Text()

fmt.Println("Прочитанная строка:", line)

}

if err := scanner.Err(); err != nil {

fmt.Println("Ошибка при чтении файла:", err)

return

}

}

Буферизованная запись в файл:

func main() {

file, err := os.Create("file.txt")

if err != nil {

fmt.Println("Ошибка при создании файла:", err)

return

}

defer file.Close()

writer := bufio.NewWriter(file)

data := []byte("Hello, World!")

_, err = writer.Write(data)

if err != nil {

fmt.Println("Ошибка при записи в файл:", err)

return

}

err = writer.Flush()

if err != nil {

fmt.Println("Ошибка при сбросе буфера:", err)

return

}


fmt.Println("Данные успешно записаны в файл.")

}

Чтение строки с клавиатуры:

func main() {

reader := bufio.NewReader(os.Stdin)

fmt.Print("Введите текст: ")

text, err := reader.ReadString('\n')

if err != nil {

fmt.Println("Ошибка чтения с клавиатуры:", err)

return

}

fmt.Println("Прочитанный текст:", text)

}

Чтение данных из файла CSV:

func main() {

file, err := os.Open("data.csv")

if err != nil {

fmt.Println("Ошибка при открытии файла:", err)

return

}

defer file.Close()

reader := csv.NewReader(file)

records, err := reader.ReadAll()

if err != nil {

fmt.Println("Ошибка при чтении файла CSV:", err)

return

}

for _, record := range records {

fmt.Println(record)

}

}

Запись данных в файл CSV:

func main() {

file, err := os.Create("data.csv")

if err != nil {

fmt.Println("Ошибка при создании файла:", err)

return

}

defer file.Close()

writer := csv.NewWriter(file)

defer writer.Flush()

data := [][]string{

{"Name", "Age", "City"},

{"John", "25", "New York"},

{"Alice", "30", "London"},

}

for _, record := range data {

err := writer.Write(record)

if err != nil {

fmt.Println("Ошибка при записи в файл CSV:", err)

return

}

}

fmt.Println("Данные успешно записаны в файл CSV.")

}

Создание архива ZIP

func main() {

zipFile, err := os.Create("archive.zip")

if err != nil {

fmt.Println("Ошибка при создании архива:", err)

return

}

defer zipFile.Close()

zipWriter := zip.NewWriter(zipFile)

defer zipWriter.Close()

fileToArchive := "file.txt"

file, err := os.Open(fileToArchive)

if err != nil {

fmt.Println("Ошибка при открытии файла:", err)

return

}

defer file.Close()

zipEntry, err := zipWriter.Create(fileToArchive)

if err != nil {

fmt.Println("Ошибка при создании записи в архиве:", err)

return

}

_, err = io.Copy(zipEntry, file)

if err != nil {

fmt.Println("Ошибка при записи файла в архив:", err)

return

}

fmt.Println("Архив успешно создан.")

}

Извлечение файла из архива ZIP

func main() {

zipFile := "archive.zip"

extractDir := "extracted_files"

err := extractZip(zipFile, extractDir)

if err != nil {

fmt.Printf("Ошибка при разархивировании архива: %v\n", err)

return

}

fmt.Println("Архив успешно разархивирован.")

// Продолжайте выполнение остальных шагов...

}

func extractZip(zipFile, extractDir string) error {

zipReader, err := zip.OpenReader(zipFile)

if err != nil {

return err

}

defer zipReader.Close()

for _, file := range zipReader.File {

extractedFilePath := filepath.Join(extractDir, file.Name)

if file.FileInfo().IsDir() {

os.MkdirAll(extractedFilePath, file.Mode())

} else {

if err := os.MkdirAll(filepath.Dir(extractedFilePath), os.ModePerm); err != nil {

return err

}

extractedFile, err := file.Open()

if err != nil {

return err

}

defer extractedFile.Close()

outputFile, err := os.OpenFile(extractedFilePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, file.Mode())

if err != nil {

return err

}

defer outputFile.Close()

_, err = io.Copy(outputFile, extractedFile)

if err != nil {

return err

}

}

}

return nil

}


Признаки "плохого кода"

Кратко рассмотрим 12 признаков, когда код можно улучшить: 1. Duplicated Code  — иногда повторяющийся код не всегда несет в себе пользу. Выде...