И таки для проверки наличия файла вот такой более лучший код (из офиц. Документации функции os.IsNotExist() ):
if _, err := os.Stat(filename); os.IsNotExist(err) {
// ничего не делаем, файла нет
} else {
// удаляем бд
// создаём новую
// удаляем файл маркера
}
другая ошибка (файл существует)
тут данные функции os.Stat()
Benchmark_Stat-8 305805 4037 ns/op
Benchmark_Open-8 257210 4964 ns/op
func Benchmark_Stat(b *testing.B) {
for i := 0; i < b.N; i++ {
_, err := os.Stat("/tmp/not_exist")
_ = os.IsNotExist(err)
}
}
func Benchmark_Open(b *testing.B) {
for i := 0; i < b.N; i++ {
_, err := os.Open("/tmp/not_exist")
_ = os.IsNotExist(err)
}
}
func IsFileExist() (bool, error) {}
в чём разница между использованием func Start() (*RestResponse, error) с указателями и "классическим" возвратом значения?
func (r *RestResponse) SetValue(value string) {
r.value = value
}
func example1() (string, err) {
if err != nil {
return "", err
}
return "hello world", nil
}
func example2() ([]string, err) {
if err != nil {
return nil, err
}
return []string{"hello", "world"}, nil
}
sysctl net.ipv4.ip_forward=1
yours_wan_ip=101.23.3.1
fwrd_ip=101.23.3.2
iptables -t nat -A PREROUTING -p tcp -m tcp -d $yours_wan_ip --dport 80 -j DNAT --to-destination $fwrd_ip:1194
iptables -A FORWARD -m state -p tcp -d $fwrd_ip --dport 1194 --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -t nat -p tcp -m tcp -s $fwrd_ip --sport 1194 -j SNAT --to-source $yours_wan_ip
os.Stat() - просто позволяет получить информацию о файле, её можно игнорировать, если вас интересует только проверка на наличие/отсутствие файла.
То есть в том примере который я описал, вы сначала проверяете через os.Stat(), что файл существует, а только потом читаете его через os.Open() (или делаете что-то другое)