Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 68 additions & 2 deletions encoding/encoding.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
package encoding

import (
"encoding/json"
"fmt"
"io"
"os"

"github.com/Yandex-Practicum/final-project-encoding-go/models"
"gopkg.in/yaml.v3"
)

// JSONData тип для перекодирования из JSON в YAML
Expand All @@ -26,15 +32,75 @@ type MyEncoder interface {
// Encoding перекодирует файл из JSON в YAML
func (j *JSONData) Encoding() error {
// ниже реализуйте метод
// ...
var dockerCompose models.DockerCompose

jsonFile, err := os.Open(j.FileInput)

if err != nil {
return fmt.Errorf("open file: %w", err)
}
jsonData, err := io.ReadAll(jsonFile)

jsonFile.Close()
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Здесь и дальше по коду можно чуть улучшить - в Go принято добавлять закрытие файла сразу после проверки ошибки - можно перенести на пару строк выше

И через defer:
defer jsonFile.Close()

тогда метод Close вызовется не сразу, а автоматически при выходе из функции. Вот тут хороший пример https://otus.ru/nest/post/2550/


if err != nil {
return fmt.Errorf("read file: %w", err)
}
if err = json.Unmarshal(jsonData, &dockerCompose); err != nil {
return fmt.Errorf("unmarshal: %w", err)
}
yamlData, err := yaml.Marshal(&dockerCompose)
if err != nil {
return fmt.Errorf("marshal: %w", err)
}
yamlFile, err := os.Create(j.FileOutput)
if err != nil {
return fmt.Errorf("create file: %w", err)
}
_, err = yamlFile.Write(yamlData)
yamlFile.Close()

if err != nil {
return fmt.Errorf("write file: %w", err)
}

return nil
}

// Encoding перекодирует файл из YAML в JSON
func (y *YAMLData) Encoding() error {
// Ниже реализуйте метод
// ...
var dockerCompose models.DockerCompose

yamlFile, err := os.Open(y.FileInput)

if err != nil {
return fmt.Errorf("open file: %w", err)
}

yamlData, err := io.ReadAll(yamlFile)

yamlFile.Close()

if err != nil {
return fmt.Errorf("read file: %w", err)
}
if err = yaml.Unmarshal(yamlData, &dockerCompose); err != nil {
return fmt.Errorf("unmarshal: %w", err)
}
jsonData, err := json.Marshal(&dockerCompose)
if err != nil {
return fmt.Errorf("marshal: %w", err)
}
jsonFile, err := os.Create(y.FileOutput)
if err != nil {
return fmt.Errorf("create file: %w", err)
}
_, err = jsonFile.Write(jsonData)
jsonFile.Close()

if err != nil {
return fmt.Errorf("write file: %w", err)
}
return nil
}