LINUX.ORG.RU

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

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

Я у тса не вижу локиги грейсфул рестарта, переинициализации подключения к бд и кучи других вещей, которые нужно было бы сделать для перезагрузки конфига

Так зачем это делать? Ты же назвал reload «ошибкой в дизайне приложения».

https://play.golang.org/p/2oLfk8Wjhav

Интересно. Decoder не использовал. Вероятно, нужно проверять еще и More() == false https://play.golang.org/p/xWRiRQqwDtz

Очевидно же, что захардкожена проверка для такой ситуации, задумано, что defer должен стоять после обработки ошибки

Да. У меня были сомнения и сейчас загуглил - так и есть. Хотя с левыми кривыми либами все равно нужно быть осторожней. Там же описан список возможных ситуаций, когда file.Close вернет ошибку. Из него следует, что defer file.Close() делать вполне допустимо.

Ну так это типичная ошибка из-за двойного отрицания. Есть функция os.IsExist(), небось в блокноте без интелисенса пишешь, потому и не заметил

Действительно, если ты не умеешь читать, то и документацию ты тоже не умеешь читать. IsExist это для совсем других ошибок.

package main

import (
	"fmt"
	"os"
)

func main() {

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

	if err != nil && os.IsExist(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         
no error

Но действительно, зачем читать документацию, автодополнение в говноIDE плохого не посоветует. Тем временем даже блокнот показывает документацию метода при автодополнении.

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

Я у тса не вижу локиги грейсфул рестарта, переинициализации подключения к бд и кучи других вещей, которые нужно было бы сделать для перезагрузки конфига

Так зачем это делать? Ты же назвал reload «ошибкой в дизайне приложения».

https://play.golang.org/p/2oLfk8Wjhav

Интересно. Decoder не использовал. Вероятно, нужно проверять еще и More() == false https://play.golang.org/p/xWRiRQqwDtz

Очевидно же, что захардкожена проверка для такой ситуации, задумано, что defer должен стоять после обработки ошибки

Да. У меня были сомнения и сейчас загуглил - так и есть. Хотя с левыми кривыми либами все равно нужно быть осторожней. Там же описан список возможных ситуаций, когда file.Close вернет ошибку. Из него следует, что defer file.Close() делать вполне допустимо.

Ну так это типичная ошибка из-за двойного отрицания. Есть функция os.IsExist(), небось в блокноте без интелисенса пишешь, потому и не заметил

Действительно, если ты не умеешь читать, то и документацию ты тоже не умеешь читать. IsExist это для совсем других ошибок.

package main

import (
	"fmt"
	"os"
)

func main() {

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

	if err != nil && os.IsExist(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         
no error

Но действительно, зачем читать документацию, автодополнение в говноIDE плохого не посоветует