LINUX.ORG.RU

История изменений

Исправление derlafff, (текущая версия) :

Не согласен, везде где принципиально важно - проверки есть.

Вот к примеру у тебя эмуляция дефолтного конфига.

func GetConfig() Config {
	var config = Config{Host: "", Port: "8080", Secret: "lol"}
	file, err := os.Open("./config.json")
	defer file.Close()
	if err == nil {
		log.Println(json.NewDecoder(file).Decode(&config))
	}
	return config
}

Что тут не так:

  • Нет корректной проверки, все ли хорошо с файлом. Может быть, он не открывается, потому что на него нет прав?
  • Конфиг может быть открыт, но декодирован неуспешно.

Немного более корректная реализация:

func GetConfig() (*Config, error) {

	var config = Config{
		Host:   "",
		Port:   "8080",
		Secret: "lol",
	}

	file, err := os.Open("config.json")
	defer file.Close()

	if err != nil && !os.IsNotExist(err) {
		return nil, err
	}

	err = json.NewDecoder(file).Decode(&config)
	if err != nil {
		return nil, err
	}

	return &config, nil
}

Исправление derlafff, :

Не согласен, везде где принципиально важно - проверки есть.

Вот к примеру у тебя эмуляция конфига.

func GetConfig() Config {
	var config = Config{Host: "", Port: "8080", Secret: "lol"}
	file, err := os.Open("./config.json")
	defer file.Close()
	if err == nil {
		log.Println(json.NewDecoder(file).Decode(&config))
	}
	return config
}

Что тут не так:

  • Нет корректной проверки, все ли хорошо с файлом. Может быть, он не открывается, потому что на него нет прав?
  • Конфиг может быть открыт, но декодирован неуспешно.

Немного более корректная реализация:

func GetConfig() (*Config, error) {

	var config = Config{
		Host:   "",
		Port:   "8080",
		Secret: "lol",
	}

	file, err := os.Open("config.json")
	defer file.Close()

	if err != nil && !os.IsNotExist(err) {
		return nil, err
	}

	err = json.NewDecoder(file).Decode(&config)
	if err != nil {
		return nil, err
	}

	return &config, nil
}

Исправление derlafff, :

Не согласен, везде где принципиально важно - проверки есть.

Вот к примеру у тебя эмуляция конфига.

func GetConfig() Config {
	var config = Config{Host: "", Port: "8080", Secret: "lol"}
	file, err := os.Open("./config.json")
	defer file.Close()
	if err == nil {
		log.Println(json.NewDecoder(file).Decode(&config))
	}
	return config
}

Что тут не так:

[list][*]Нет корректной проверки, все ли хорошо с файлом. Может быть, он не открывается, потому что на него нет прав? [*]Конфиг может быть открыт, но декодирован неуспешно. [/list]

Немного более корректная реализация:

func GetConfig() (*Config, error) {

	var config = Config{
		Host:   "",
		Port:   "8080",
		Secret: "lol",
	}

	file, err := os.Open("config.json")
	defer file.Close()

	if err != nil && !os.IsNotExist(err) {
		return nil, err
	}

	err = json.NewDecoder(file).Decode(&config)
	if err != nil {
		return nil, err
	}

	return &config, nil
}

Исходная версия derlafff, :

Не согласен, везде где принципиально важно - проверки есть.

Вот к примеру у тебя эмуляция конфига.

	var config = Config{Host: "", Port: "8080", Secret: "lol"}
	file, err := os.Open("./config.json")
	defer file.Close()
	if err == nil {
		log.Println(json.NewDecoder(file).Decode(&config))
	}
	return config
}```

Что тут не так:

[list][*]Нет корректной проверки, все ли хорошо с файлом. Может быть, он не открывается, потому что на него нет прав?
[*]Конфиг может быть открыт, но декодирован неуспешно.
[/list]

Немного более корректная реализация:

```func GetConfig() (*Config, error) {

	var config = Config{
		Host:   "",
		Port:   "8080",
		Secret: "lol",
	}

	file, err := os.Open("config.json")
	defer file.Close()

	if err != nil && !os.IsNotExist(err) {
		return nil, err
	}

	err = json.NewDecoder(file).Decode(&config)
	if err != nil {
		return nil, err
	}

	return &config, nil
}