LINUX.ORG.RU

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

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

Получишь, потому, что тебе придет nil, на котором вызовешь Close()

Не получу. Еще раз, разжевываю на пальцах:

1) go позволяет делать вызывы с pointer receiver

2) в коде os.Close есть проверка на nil https://golang.org/src/os/file_unix.go?s=6716:6744#L212

Критично. Ошибку ты должен пробросить дальше

К каким проблемам в каких ситуациях может это привести?

В том, что если ошибка произошла, но файл существует, ты эту ошибку опускаешь

Мне нечего добавить к тому, что ты просто не умеешь читать

package main

import (
	"fmt"
	"os"
)

func main() {

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

	if err != nil && !os.IsNotExist(err) {
		fmt.Println("got error", err)
		return
	}

	fmt.Println("no error")
}
der@nyanpad /tmp % go run main.go 
no error
der@nyanpad /tmp % touch config.json
der@nyanpad /tmp % go run main.go   
no error
der@nyanpad /tmp % chmod a-rwx config.json 
der@nyanpad /tmp % go run main.go         
got error open config.json: permission denied

В том, что они работают не эквивалентно. Потоковый декодер спокойно проглатывает незакрытые кавычки и в нем есть другие нюансы. Плавали, знаем.

Примеры в студию, звучит как сказки.

Перечитывать конфиг - это с вероятностью 99% ошибка в дизайне приложения

В фортунки, что еще сказать

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

Получишь, потому, что тебе придет nil, на котором вызовешь Close()

Не получу. Еще раз, разжевываю на пальцах:

1) go позволяет делать вызывы с pointer receiver

2) в коде os.Close есть проверка на nil https://golang.org/src/os/file_unix.go?s=6716:6744#L212

Критично. Ошибку ты должен пробросить дальше

К каким проблемам в каких ситуациях может это привести?

В том, что если ошибка произошла, но файл существует, ты эту ошибку опускаешь

Мне нечего добавить к тому, что ты просто не умеешь читать

```package main

import ( «fmt» «os» )

func main() {

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

if err != nil && !os.IsNotExist(err) { fmt.Println(«got error», err) return }

fmt.Println(«no error») } ```

``` der@nyanpad /tmp % go run main.go no error der@nyanpad /tmp % touch config.json der@nyanpad /tmp % go run main.go no error der@nyanpad /tmp % chmod a-rwx config.json der@nyanpad /tmp % go run main.go got error open config.json: permission denied ```

В том, что они работают не эквивалентно. Потоковый декодер спокойно проглатывает незакрытые кавычки и в нем есть другие нюансы. Плавали, знаем.

Примеры в студию, звучит как сказки.

Перечитывать конфиг - это с вероятностью 99% ошибка в дизайне приложения

В фортунки, что еще сказать