Size: a a a

2020 July 25

DM

Dmitry M in Go-go!
🅚🅘🅝🅓🅔🅡🅦🅞🅝🅓
Последовательную запись в файл
Допустим Вова и Юра захотели записать в одно время данные
Но нужно же их построить в одну очередь как-то...
Они хотят записать в одно и то же место?
источник

🅚

🅚🅘🅝🅓🅔🅡🅦🅞🅝🅓... in Go-go!
Dmitry M
Они хотят записать в одно и то же место?
В один файл
Порядок очереди не важен
источник

D

Denis in Go-go!
а я бы через канал сделал, имхо канал максимально к месту
просто кто угодно фигачит строки в канал
в одном месте читаем из канала и пишем в файлик
источник

DM

Dmitry M in Go-go!
Технически mutex можно опустить. Файловый дескриптор имеет при себе mutex
источник

ЕО

Евгений Омельченко... in Go-go!
Dmitry M
Технически mutex можно опустить. Файловый дескриптор имеет при себе mutex
Запись в файл не гарантирует, что будет записано всё
источник

ЕО

Евгений Омельченко... in Go-go!
Т.е. write(fd, "Hello") может вернуть 1 и записать только "H"
источник

DM

Dmitry M in Go-go!
Евгений Омельченко
Запись в файл не гарантирует, что будет записано всё
Кто в нашем мире даёт гарантии?
источник

ЕО

Евгений Омельченко... in Go-go!
Ну просто записать половину переданного буфера это норма
источник

ЕО

Евгений Омельченко... in Go-go!
Нужно писать блок данных пока он не запишется целиком
источник

🅚

🅚🅘🅝🅓🅔🅡🅦🅞🅝🅓... in Go-go!
Тогда единственный выход - мьютекс
Проект не масштабный, кол. Юзеров думаю ограничется 50-100 человек

Спасибо!!!
источник

DM

Dmitry M in Go-go!
Евгений Омельченко
Ну просто записать половину переданного буфера это норма
Как бы в цикле пытаемся всё записать https://github.com/golang/go/blob/master/src/internal/poll/fd_unix.go#L253
источник

IC

Ivan Cold 💨 in Go-go!
Dmitry M
Как бы в цикле пытаемся всё записать https://github.com/golang/go/blob/master/src/internal/poll/fd_unix.go#L253
правильно ли что тогда при попытке параллельной записи, лок на строке на строке 254 не возьмется? В этом случае как ни крути надо какой-то примитив синхронизации брать
источник

DM

Dmitry M in Go-go!
Ivan Cold 💨
правильно ли что тогда при попытке параллельной записи, лок на строке на строке 254 не возьмется? В этом случае как ни крути надо какой-то примитив синхронизации брать
В этом кейсе выходим с ошибкой
источник

DM

Dmitry M in Go-go!
Ivan Cold 💨
правильно ли что тогда при попытке параллельной записи, лок на строке на строке 254 не возьмется? В этом случае как ни крути надо какой-то примитив синхронизации брать
источник

p

pragus in Go-go!
Dmitry Soloma
В go 1.14 сменился тип многозадачности на некооперативную. Так что с этим все ок будет
И до 1.14 было бы все ок
источник

p

pragus in Go-go!
Dmitry M
Как бы в цикле пытаемся всё записать https://github.com/golang/go/blob/master/src/internal/poll/fd_unix.go#L253
А причем тут internal/poll?
источник

DM

Dmitry M in Go-go!
pragus
А причем тут internal/poll?
Там лежит poll.FD, который используется в реализациях file_unix.go  file_windows.go
источник

p

pragus in Go-go!
Dmitry M
Там лежит poll.FD, который используется в реализациях file_unix.go  file_windows.go
Так нет смысла поллить обычные файлы
источник

DM

Dmitry M in Go-go!
pragus
Так нет смысла поллить обычные файлы
Нет. Но так реализовано.
источник

m

maximus in Go-go!
Ребят подскажите как починить?
Пытаюсь запустить тесты
go test  ./...


Получаю:
# runtime/internal/sys
compile: version "go1.14.2" does not match go tool version "go1.13.5"
# math/bits
compile: version "go1.14.2" does not match go tool version "go1.13.5"
# unicode/utf8
compile: version "go1.14.2" does not match go tool version "go1.13.5"
# internal/race
compile: version "go1.14.2" does not match go tool version "go1.13.5"
источник