• Как ввернуть нескольких значений одной функцией в printf()?

    @falconandy
    uvelichitel, с мапой видимо придется тоже через спецфункцию:

    func getMapValue[K comparable, V any](m map[K]V, key K) (V, bool) {
    	value, ok := m[key]
    	return value, ok
    }
    
    fmt.Printf("Цена: %v , ok= %t\n", wrap(getMapValue(products, "Hat"))...)
    Написано
  • Golang import. Как исправить "no required module provides package"?

    @falconandy
    возможно в проекте прямо или косвенно используется как github.com/go-chi/chi/v5 так и github.com/go-chi/chi и это каким-то образом приводит к ошибке
    Написано
  • Golang import. Как исправить "no required module provides package"?

    @falconandy
    какие импорты прописаны в precode.go (хотя бы относящиеся к chi)?
    Написано
  • Golang import. Как исправить "no required module provides package"?

    @falconandy
    Еще прямо в тексте ошибки предлагается выполнить go get github.com/go-chi/chi/v5. Пробовали?
    Написано
  • Golang import. Как исправить "no required module provides package"?

    @falconandy
    Можно попробовать удалить файл go.sum, а в go.mod удалить всё, после строки go 1.20 и снова выполнить go mod tidy.

    Еще пишут, что такая ошибка может возникнуть при использовании Go workspaces.
    Написано
  • Как добавить в пакет golang.org/x/text/language Белорусский язык?

    @falconandy
    kedavr13, с изменениями ниже base, conf := regionlang.Find("by") вроде работает:

    Изменения в golang.org/x/net
    Index: language/tags.go
    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
    ===================================================================
    diff --git a/language/tags.go b/language/tags.go
    --- a/language/tags.go	(revision fb697c0580b4b6ab0a21ca17e64788b981fb6018)
    +++ b/language/tags.go	(date 1691299509976)
    @@ -142,4 +142,5 @@
     	SimplifiedChinese    Tag = Tag(compact.SimplifiedChinese)
     	TraditionalChinese   Tag = Tag(compact.TraditionalChinese)
     	Zulu                 Tag = Tag(compact.Zulu)
    +	Belorusian           Tag = Tag(compact.Belorusian)
     )
    Index: internal/language/compact/tags.go
    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
    ===================================================================
    diff --git a/internal/language/compact/tags.go b/internal/language/compact/tags.go
    --- a/internal/language/compact/tags.go	(revision fb697c0580b4b6ab0a21ca17e64788b981fb6018)
    +++ b/internal/language/compact/tags.go	(date 1691299495704)
    @@ -88,4 +88,5 @@
     	SimplifiedChinese    Tag = Tag{language: zhHansIndex, locale: zhHansIndex}
     	TraditionalChinese   Tag = Tag{language: zhHantIndex, locale: zhHantIndex}
     	Zulu                 Tag = Tag{language: zuIndex, locale: zuIndex}
    +	Belorusian           Tag = Tag{language: beBYIndex, locale: beBYIndex}
     )


    Изменения в github.com/modernice/go-regionlang
    Index: find.go
    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
    ===================================================================
    diff --git a/find.go b/find.go
    --- a/find.go	(revision edd88e394d22f289149b1b0a5b7fb7bfe13c01ef)
    +++ b/find.go	(date 1691299614522)
    @@ -168,4 +168,5 @@
     	language.SimplifiedChinese,
     	language.TraditionalChinese,
     	language.Zulu,
    +	language.Belorusian,
     }
    Написано
  • Как добавить в пакет golang.org/x/text/language Белорусский язык?

    @falconandy
    Можно форкнуть и исправить/расширить нужный пакет/пакеты как вам нужно. Затем в своем приложении заменить оригинальные пакеты на свои исправленные форки с помощью replace директивы в go.mod:
    replace golang.org/x/net v1.2.3 => example.com/fork/net v1.4.5
    
    replace (
        golang.org/x/net v1.2.3 => example.com/fork/net v1.4.5
        golang.org/x/net => example.com/fork/net v1.4.5
        golang.org/x/net v1.2.3 => ./fork/net
        golang.org/x/net => ./fork/net
    )
    Написано
  • Как быстро отправить 1 миллион запросов на внешний API?

    @falconandy
    А, понял. Тогда, как писал выше, локально найти ближайшие ("грубым" расчетом, по прямому расстоянию между точками) кандидаты-точки (пусть даже их будет 10000) и уже только их послать на сервис для точного расчета по реальному расстоянию/времени. Возможно этого будет достаточно, чтобы найти корректный ответ в большинстве случаев, не посылая все миллион запросов.
    Написано
  • Как быстро отправить 1 миллион запросов на внешний API?

    @falconandy
    Странное условие. Т.е. точки - это не координаты, а просто перечень локаций типа Кафе1, Магазин2, Театр3? А координаты знает только сервис? Или по каким-то причинам не нужно повторять расчет на клиенте? Можно сделать локальный "грубый" (неточный) расчет на клиенте, если координаты все таки известны, определить кандидатов на ближайшую точку (100 или 1000 точек, например) и только уже их послать на сервис для точного расчета.
    Написано
  • Как быстро отправить 1 миллион запросов на внешний API?

    @falconandy
    Т.е. предполагается, что локально считать расстояние не умеем?
    Написано
  • Golang Websocket не проходит авторизацию Middleware?

    @falconandy
    SSSSTTTTAAAASSSS, попробуйте для интереса куку с атрибутом HttpOnly=false
    Написано
  • Golang Websocket не проходит авторизацию Middleware?

    @falconandy
    Нашел старый код - только тут не используется ни gin, ни конкретно в этом коде middleware. Попробуйте у себя тоже напрямую проверить куки - есть ли они вообще:
    func (s *PrimaryServer) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    	tabID := r.URL.Query().Get("tabId")
    
    	log.Printf("Websocket connected (primary): %s, %s\n", r.RemoteAddr, r.URL)
    	defer log.Printf("Websocket disconnected (primary): %s, %s\n", r.RemoteAddr, r.URL)
    
    	conn, err := s.upgrader.Upgrade(w, r, nil)
    	if err != nil {
    		log.Printf("Websocket upgrade error for %s: %v\n", r.RemoteAddr, err)
    		return
    	}
    
    	var sessionID string
    	cookie, _ := r.Cookie(s.cookieSessionID)
    	if cookie != nil {
    		sessionID = cookie.Value
    	}
    	if sessionID == "" {
    		return
    	}
    
    	user, err := s.findUser(r)
    	if err != nil {
    		log.Printf("can't find user in websocker request: %s", err)
    		return
    	}
    
    	s.serve(r, conn, sessionID, TabID(tabID), user.User())
    }


    Код на клиенте:
    function reconnectWebSocket() {
      if (ws.current != null && ws.current.readyState !== WebSocket.CLOSED)
        return;
    
      const wsProtocol = window.location.protocol === "https:" ? "wss" : "ws";
      let apiHost = apiEndpoint();
      if (apiHost !== "") {
        apiHost = apiHost.substr(apiHost.indexOf("://") + "://".length);
      } else {
        apiHost = window.location.host;
      }
      ws.current = new WebSocket(`${wsProtocol}://${apiHost}/websocket?tabId=${getTabId()}`);
      ws.current.onmessage = onMessage;
    }
    Написано
  • Как тестировать сетевые запросы в Go?

    @falconandy
    Из контейнера тестов вы должны обращаться к контейнеру сервера не по localhost, а по имени контейнера сервера и по оригинальному порту, на котором висит сервер. Т.е. что-то типа http://server:8081
    Написано
  • Как тестировать сетевые запросы в Go?

    @falconandy
    Возможные причины:
    1. Не тот порт
    2. Тесты и сервер запускаются не на одной "машине" (например, что-то из этого вы запустили в докере)
    3. Сервер не запущен.

    Попробуйте выполнить команду типа curl http://localhost:8000 там же, где вы запускаете тесты.
    Что у вас в argv.Addr - :8000 или что-то другое?
    Написано
  • Go не верное выделение памяти для []byte или ошибка в go test benchmark?

    @falconandy
    Как вывод: надо смотреть усредненные данные на множестве прогонов (не пытаться ограничивать count). Одиночные прогоны не имеют особого смысла.
  • Go не верное выделение памяти для []byte или ошибка в go test benchmark?

    @falconandy
    Еще результаты как-то зависят от параметра cpu. С командой
    go test -bench=. -benchtime=1x -count=10 -benchmem -cpu=1

    результаты по последним 2-м колонкам стабильны (кроме самого первого)

    Benchmark_Stdlog               1             44000 ns/op           11168 B/op         35 allocs/op
    Benchmark_Stdlog               1             10350 ns/op             152 B/op          3 allocs/op
    Benchmark_Stdlog               1              9900 ns/op             152 B/op          3 allocs/op
    Benchmark_Stdlog               1              3600 ns/op             152 B/op          3 allocs/op
    Benchmark_Stdlog               1              3390 ns/op             152 B/op          3 allocs/op
    Benchmark_Stdlog               1              3080 ns/op             152 B/op          3 allocs/op
    Benchmark_Stdlog               1              2910 ns/op             152 B/op          3 allocs/op
    Benchmark_Stdlog               1              2890 ns/op             152 B/op          3 allocs/op
    Benchmark_Stdlog               1              2850 ns/op             152 B/op          3 allocs/op
    Benchmark_Stdlog               1              2880 ns/op             152 B/op          3 allocs/op
  • Go не верное выделение памяти для []byte или ошибка в go test benchmark?

    @falconandy

    Вывод: доверять бенчмаркам в этой части нельзя, если используется переиспользование чего-либо.


    Почему нельзя доверять - как раз всё правильно, никакого выделения памяти не было, если не считать первую итерацию.

    У меня например другое число, но если прогнать бенчмарк с параметром count большим чем 1, то видно что при первом прогоне скорее всего какие-то накладные расходы на какую-то инициализацию.

    Benchmark_Stdlog-4             1             46619 ns/op           11552 B/op         35 allocs/op
    Benchmark_Stdlog-4             1             10380 ns/op             536 B/op          3 allocs/op
    Benchmark_Stdlog-4             1             18110 ns/op             536 B/op          3 allocs/op
    Benchmark_Stdlog-4             1             13820 ns/op             760 B/op          5 allocs/op
    Benchmark_Stdlog-4             1             10880 ns/op             760 B/op          5 allocs/op
    Benchmark_Stdlog-4             1             12119 ns/op             760 B/op          5 allocs/op
    Benchmark_Stdlog-4             1              9430 ns/op             536 B/op          3 allocs/op
    Benchmark_Stdlog-4             1              7560 ns/op             536 B/op          3 allocs/op
    Benchmark_Stdlog-4             1              5040 ns/op             536 B/op          3 allocs/op
    Benchmark_Stdlog-4             1              9800 ns/op             760 B/op          5 allocs/op


    Расхождения 3 или 5 allocs/op возможно связаны с тем, как собираются данные профайлинга (точный, но дорогой tracing, или дешевый, но не совсем/всегда точный sampling). Но тут я не уверен.
  • Почему после сборки приложения картинки не сохраняются?

    @falconandy
    Нет, с мобилками практически не работал, а на Go вообще никогда.