Danila
После компиляции не удаётся запустить бинарник
./http: line 1: syntax error near unexpected token `newline'
./http: line 1: `!<arch>'
Olzhas
Danila
С чем это может быть связано?
Aleksandr
компилишь на хосте или в докере?
Daniel
погодите
Daniel
это ошибка компилятора же
Olzhas
Danila
Aleksandr
На хосте
перекомпиль, покажи лог компиляции
Nazar
Danila
гопаф кривой
GOPATH="/home/user/go"
GOROOT="/usr/local/go"
Olzhas
Danila
Есть
import (
"net/http"
"github.com/gin-gonic/gin"
)
Olzhas
а сам пакет как называется?
Danila
khcp
Daniel
Olzhas
т.е. код примерно такой
package khcp
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
//blablabla
}?
Danila
Olzhas
и собираете командой go build -o http?
Danila
go build -o http http.go
Danila
Вот код:
package khcp
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.New()
r.GET("/", func(c *gin.Context) {
c.String(http.StatusOK, "Hello World!")
})
r.GET("/ping", func(c *gin.Context) {
c.String(http.StatusOK, "pong")
})
http.Handle("/", r)
}
Olzhas
Olzhas
а не khcp
Olzhas
исправьте и будет вам щастье
Olzhas
вы модуль пытаетесь собрать как исполняемый файл
Danila
Oleg
Daniel
таааак
Daniel
я все пропустил
Oleg
давай я повторю
Daniel
Ага
Oleg
Есть REST API, в нем метод для частичного обновления сущности PATCH. Он может быть реализован как:
1) https://tools.ietf.org/html/rfc7386
2) https://tools.ietf.org/html/rfc6902
3) пересылать полностью состояние сущности, при этом запоминать все версии сущностей, вычислять дельту по сравнению с нужной версией
4) пересылать полностью состояние сущности, при этом придумывать блокировки на время редактирования
5) пересылать полностью состояние сущности, при этом слать клиента лесом если он пытается изменить устаревшую версию сущности.
Что из этого кто использует, что проще, как реализовывать на golang?
Daniel
я бы, если бы ТЗ позволяло, делал 5
Daniel
тут несколько плюсов:
Daniel
1. не надо реализовывать логику мерджа
Daniel
2. не надо думать о том, кто первый встал и чьи тапки
Daniel
3. на случай конкурентного изменения у нас есть четкий индикатор того, что что-то пошло не так
arkady
Daniel
нет, конечно
Oleg
Daniel
там только sequence надо хранить, и сравнивать с тем, что приехало
arkady
Тогда мб проще на уровне бд атомарно записать?
Daniel
и проверку сиквенса на триггер?
Daniel
можно и так
arkady
Получается одна транзакция
Oleg
еще мнения будут?
Alexander
Есть REST API, в нем метод для частичного обновления сущности PATCH. Он может быть реализован как:
1) https://tools.ietf.org/html/rfc7386
2) https://tools.ietf.org/html/rfc6902
3) пересылать полностью состояние сущности, при этом запоминать все версии сущностей, вычислять дельту по сравнению с нужной версией
4) пересылать полностью состояние сущности, при этом придумывать блокировки на время редактирования
5) пересылать полностью состояние сущности, при этом слать клиента лесом если он пытается изменить устаревшую версию сущности.
Что из этого кто использует, что проще, как реализовывать на golang?
я бы сделал так
1) Шлется некий GET запрос, на ендпоинт, которым мы показываем, что хотим отредактировать некую сущность. Сервер делает лок на сущность и в ответ на клиента передается некий токен
2) На клиенте происходит какое-то редактирование сущности и потом вся сущность передается на сервер, вместе с полученным токеном
3) Сервер проверяет что сущность открыта на редактирование клиентом именно с таким токеном и производит обновление сущности
4) Все время, пока кто-то уже открыл сущность на редактирование, все остальные такие запросы отбиваются с ошибкой "юзер такой-то уже редактирует такую сущность".
5) У всех запросов на редактирование есть определенный таймаут, во избежание перманентного лока на редактирование
Anton
Alexander
Alexander
просто на lock если кто-то уже занял шлется отлуп. и есть автоматический unlock, если что-то пошло не так
Aleksandr
Alexander
Alexander
условно - бэк-офис в котором работают менеджеры
Vladimir 👀
L
Гайз, не очень понимаю куда вопрос лучше задать, поэтому сюда.
Есть задачка. Дано много (миллиарлды) многомерных векторов с одинаковой размерностью.
На вход подается новый вектор и нужно найти N ближайших к нему по метрике косиносного расстояния (или евлидова). На чем такое можно построить? Или лучше свой велосипедик писать на гошечке?
Oleg
на мой взгляд надо рассчитывать на три edgecase. 1) Редактирование с контролем номера версии сущности на уровне формы 2) Редактирование на уровне отдельного поля 3) Очень конкурентное редактирование с организацией потока сообщений о каждом элементарном изменении и рассылкой (гуглодоки)
L
ну и да, время на запрос очень ограничено
Roman
Roman
L
Roman
L
Железом не обделены. Что-то вроде интелов E5-2620 и много памяти
L
Vladimir
L
ну по сути, кроме этой задачи такие сервера не будет ничем другим заниматься. трафика достаточно там будет
Roman
Евгений
L
Daniel
Daniel
но хорошо не будет - там, очевидно, полный перебор
Daniel
а как вы хотите? индексы хорошо работают на одномерных векторах
Daniel
на многомерных - не очень
Daniel
но у вас-то вообще евклидово расстояние (даже не манхеттен)