@gogolang

Страница 520 из 1630
in favor
21.09.2017
12:13:47
но ошибок может быть много, не?

Alexander
21.09.2017
12:15:38
Ну и отлично. видишь ошибку. Мне кажется это лучше, чем isfileexist, isfilereadonly, isfileчтототам

А если нужно просто проверить наличие файла, то чтото неверно в постановке задачи ?

Google
Andrew
21.09.2017
12:17:31
А если нужно просто проверить наличие файла, то чтото неверно в постановке задачи ?
Например, нужно откопировать файлы из одного каталога в другой. Если файл в целевом каталоге существует, НЕ перезаписывать его.

Сэкономлю аж 2 строчки при юзании isFileExist ?

Mush
21.09.2017
12:24:10
а то, что round нет?

Aleksandr
21.09.2017
12:24:24
а то, что round нет?
но будет же

Alexander
21.09.2017
12:27:23
Я бы попросил это сделать оболочку )

Andrew
21.09.2017
13:19:33
if _, err := os.Stat("/path/to/file"); !os.IsNotExist(err) { printf("File doesn't exist"); } Вполне достточно
Выше писал, что решение есть, но оно не красивое.

Никита
21.09.2017
13:20:00
Andrew
21.09.2017
13:20:33
в красивом будет другой метод?
В красивом будет os.IsFileExists(filename) bool

AxiS
21.09.2017
13:21:48
Выше писал, что решение есть, но оно не красивое.
ну напиши свою либу utils и используй во всех проектах)

Никита
21.09.2017
13:22:12
В красивом будет os.IsFileExists(filename) bool
filePath := "/path/to/file" if !os.Stat(filePath) { printf("File doesn't exist"); } file, err := os.Open(filePath) if err != nil { panic(err) } или filePath := "/path/to/file" file, err := os.Open(filePath) if err != nil { panic(err) } я правда не понимаю, в чем смысл)

error все равно будет

Google
Никита
21.09.2017
13:22:47
ну вставь switch если хочешь обработать отдельно, все равно лучше не будет

Andrew
21.09.2017
13:23:34
Смысл в том, что сразу понятно назначение кода.

AxiS
21.09.2017
13:24:18
ну заменишь _, err := os.Stat("/path/to/file"); !os.IsNotExist(err) на isExist("...") Сильно читаемость повысится?

if все равно останется, будет лишь немного короче

Никита
21.09.2017
13:24:49
Andrew
21.09.2017
13:25:45
дай пример кода, правда
if !os.IsFileExists("file.txt") { fmt.Println("Файл не существует") }

Andrew
21.09.2017
13:26:20
Никита
21.09.2017
13:26:41
if !os.IsFileExists("file.txt") { fmt.Println("Файл не существует") }
думаешь чего больше, кейсов, когда надо проверить , есть ли файл или тех, где потом с ним надо работать?

Andrew
21.09.2017
13:27:28
Никита
21.09.2017
13:27:53
Это плохой принцип не писать тот код, что редко используется.
дело в том, что код для второго случая покрывает первый

Andrew
21.09.2017
13:28:35
дело в том, что код для второго случая покрывает первый
Зачем тогда в пакете есть os.Create, когда его покрывает os.OpenFile?

Никита
21.09.2017
13:29:52
Зачем тогда в пакете есть os.Create, когда его покрывает os.OpenFile?
не знаю, может потому что его чаще используют?

AxiS
21.09.2017
13:30:48
Зачем тогда в пакете есть os.Create, когда его покрывает os.OpenFile?
загляни в create он вызывает openfile func Create(name string) (*File, error) { return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666) }

Никита
21.09.2017
13:31:02
он про это и говорит

Andrew
21.09.2017
13:31:21
загляни в create он вызывает openfile func Create(name string) (*File, error) { return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666) }
Я в курсе. Вопрос в том, что для одного случая есть сахар, для другого - нет.

Никита
21.09.2017
13:31:23
его метод Exists тоже будет вызывать`Open`

просто единственный common кейс, когда тебе надо проверить, есть ли файл, когда ты проверяешь сразу много файлов. а тогда ты просто вычитываешь навания файлов в директории и смотришь на слайс

разве нет?

AxiS
21.09.2017
13:33:20
Я в курсе. Вопрос в том, что для одного случая есть сахар, для другого - нет.
в случае создания не нужно париться на счет прав и флагов. А вот проверка выполняется и без сахары просто

Google
Andrew
21.09.2017
13:33:26
Короче вот тут мнение разраба https://stackoverflow.com/questions/12518876/how-to-check-if-a-file-exists-in-go [...] It's not actually needed very often and [...] using os.Stat is easy enough for the cases where it is required.

Тогда остаётся вопрос, почему нету функции простого копирования файлов.

Никита
21.09.2017
13:34:54
ну он как раз пишет, что это никто не использует

Тогда остаётся вопрос, почему нету функции простого копирования файлов.
скорее всего потому, что копирование из, например, http.Body файл и копирование из файла в файл сейчас одинаковые, Reader Writer все дела и опять же, усложнять незачем . ридер у тебя всегда есть, если ты открыл файл

Michael
21.09.2017
13:38:16
Короче вот тут мнение разраба https://stackoverflow.com/questions/12518876/how-to-check-if-a-file-exists-in-go [...] It's not actually needed very often and [...] using os.Stat is easy enough for the cases where it is required.
так себе отговорка а потом почти у каждого вариации на тему func IsExists(path string) bool { if _, err := os.Stat(path); os.IsNotExist(err) { return false } return true }

Michael
21.09.2017
13:40:30
но с ос статс как-то через чур

AxiS
21.09.2017
13:41:43
А если файлы надо просто копировать/перемещать без открытия?
ну ты же понимаешь что открытие все равно будет?

Michael
21.09.2017
13:41:57
юзай команды bash

там и го не нужен для просто скопировать

Никита
21.09.2017
13:42:40
AxiS
21.09.2017
13:42:42
из го вызывать команды bash)

Andrew
21.09.2017
13:43:01
Димка
21.09.2017
13:43:38
Andrew
21.09.2017
13:44:00
для перемещения есть os.Rename
Не работает, если нужно переместить между разными носителями (например, из tmpfs на диск).

Никита
21.09.2017
13:45:01
os.Copy(dst, src string) error
а реализацию то)

Aleksandr
21.09.2017
13:45:44
ребят, а вы еще продолжаете?))) третий час подходит к концу

Google
Никита
21.09.2017
13:46:10
скучно (

Andrew
21.09.2017
13:46:25
а реализацию то)
Ты наверно не понял, про что ведём разговор. Вопрос в том, почему на такой простой функционал каждый прогер должен писать свою реализацию вместо того, чтобы вызвать свою функцию из стандартной либы.

Димка
21.09.2017
13:46:45
ребят, а вы еще продолжаете?))) третий час подходит к концу
намекает что за это время можно было бы и библиотеку написать ?

Никита
21.09.2017
13:47:40
Ты наверно не понял, про что ведём разговор. Вопрос в том, почему на такой простой функционал каждый прогер должен писать свою реализацию вместо того, чтобы вызвать свою функцию из стандартной либы.
я же говорю, из-за интерфейсов Reader и Writer они обобщают работу надо всем, не только над файлами. и существубщая функция для всего подходит

Andrew
21.09.2017
13:48:03
Вот по поводу перемещения https://github.com/golang/go/issues/13766

я же говорю, из-за интерфейсов Reader и Writer они обобщают работу надо всем, не только над файлами. и существубщая функция для всего подходит
На что я парирую, что os.OpenFile тоже годится и для создания файла, и для открытия. Но для них написаны os.Create и os.Open соответственно.

Ладно, я что-то устал ))

Michael
21.09.2017
13:50:26
на частоту сферических коней в ваккууме

Andrew
21.09.2017
13:50:52
Michael
21.09.2017
13:51:39
в баре с шмузи

Никита
21.09.2017
13:51:44
Наверно исследование они провели ))
чтобы узнать, что в детроите воняет, не надо туда ездить)

Michael
21.09.2017
13:51:49
провели точно хорошо время

AxiS
21.09.2017
13:53:23
в случае создания не нужно париться на счет прав и флагов. А вот проверка выполняется и без сахары просто

Andrew
21.09.2017
13:55:12
в случае создания не нужно париться на счет прав и флагов. А вот проверка выполняется и без сахары просто
> в случае создания не нужно париться В винде да. В линуксе не соглашусь.

AxiS
21.09.2017
13:58:17
> в случае создания не нужно париться В винде да. В линуксе не соглашусь.
С чем не согласишься? Cо своим доводом? Create дефолтный только есть, с параметрами по умолчанию Нужен наверно еще такой?) func Create(name string, flag int, perm FileMode) (*File, error) { return OpenFile(name, flag, perm) }

Michael
21.09.2017
14:10:42
а что с виндой не так?

Google
Michael
21.09.2017
14:11:12
ругнуться на отсутствие прав и она может

Zloy Dobriy
21.09.2017
14:11:42
а что с виндой не так?
с ней все не так

Michael
21.09.2017
14:12:09
ой, всё! (с)

Zloy Dobriy
21.09.2017
14:12:32
ага да

Axm
21.09.2017
15:16:48
делаю простой DI типа того, как описано в этой статье https://appliedgo.net/di/. если у меня все в разных пакетах, то куда будет по фень-шую засунуть интерфейс? т.е. пакет А с методом М1 требует интерфейс И1. структура с методом, который его реализует, находится в пакете Б. интерфейс надо куда класть? в А, Б или третий пакет?

Aleksandr
21.09.2017
15:22:41
поясни, не хочу додумывать, что ты имел в виду

что значит "пакет требует", кого реализовывает?

Axm
21.09.2017
15:36:57
поясни, не хочу додумывать, что ты имел в виду
там по ссылке есть пример кода в конце. представь, что Poem, Notebook и Napkin в разных пакетах. куда положить интерфейс, который все это связывает между собой?

Mush
21.09.2017
15:37:46
субъективный вопрос

Axm
21.09.2017
15:38:09
ну вот мне интересно, кто как думает

Mush
21.09.2017
15:39:03
если все остальное в разных пакетах - то в отдельный пакет, если они все в одном пакете - то в тот же пакет

Aleksandr
21.09.2017
15:40:09
смотри. ты можешь воспользоваться интерфейсом стороннего пакета (пусть и своего), можешь абстрагироваться своим интерфейсом. все зависит от того, насколько ты хочешь сделать несвязанный пакет

хочешь узнать кто как бы сделал, озвучь конкретный кейс

Axm
21.09.2017
15:41:00
да я сразу понял, что можно куда угодно, вопрос куда правильнее?

Aleksandr
21.09.2017
15:41:03
> представь, что Poem, Notebook и Napkin в разных пакетах это не имеет смысла

Mush
21.09.2017
15:41:22
я бы положил все это в 1 пакет

Axm
21.09.2017
15:41:39
чо это? а если у меня много кода и клиенты к разным системам?

Страница 520 из 1630