Dmitry
да
Dmitry
имхо, но каналы в этом случаи предпочтительней,
будет функция которая собирает данные и кладёт в канал.
и вторая функция, которая будет читать из канала всё что придёт и как то с этим жить
Daniel
если только "как с этим жить" не придется распараллеливать
Anonymous
Daniel
но именно обновление слайса можно делать или одной горутиной, слушающей канал, или закрыть обновление слайса мьютексом (рид-райт-мутексом, возможно)
Dmitry
Anonymous
Anonymous
Anonymous
Anonymous
Парни, после go build получаю такую ошибку
> app\models\user.go:18: invalid recursive type User
Юзаю gorm, собсна
https://play.golang.org/p/0agwqBt3i8
Гугл не помог, чаво не так?
Aleksandr
видимо ругается на User в 30 строке
Aleksandr
и на 40
Anonymous
Хм, а как можно починить?
Там связь через user_id(UserID) должна быть
Aleksandr
про гугл ты врешь - https://www.google.ru/search?client=ubuntu&channel=fs&q=gorm+recursive+type&ie=utf-8&oe=utf-8&gfe_rd=cr&ei=f4-NWeu_OsqEygXNt5X4BA
Anonymous
Забанили меня там просто :с
Спасибо :)
Anonymous
Ох уж эти указатели, спасли.
Спасибо еще раз
Anonymous
Anonymous
Anonymous
Подскажите такой момент, набросал пример сбора файлов из 2-х дир, так то их может быть больше но не суть. Вот что получилось:
import (
"fmt"
"os"
"path/filepath"
"strings"
"sync"
)
func main() {
var slicePath []string
var wg sync.WaitGroup
var c chan string = make(chan string)
go collectionPath(&slicePath, c)
wg.Add(2)
go walkDir(C:\TEST_PATH\001, c, &wg)
go walkDir(C:\TEST_PATH\002, c, &wg)
wg.Wait()
fmt.Println(len(slicePath) - 2)
for _, path := range slicePath {
fmt.Println(path)
}
}
func collectionPath(slicePath *[]string, c chan string) {
for {
path := <-c
*slicePath = append(*slicePath, path)
}
}
func walkDir(path string, c chan string, wg *sync.WaitGroup) {
filepath.Walk(path, func(wPath string, info os.FileInfo, err error) error {
c <- strings.Replace(wPath, "\\", "/", -1)
return nil
})
wg.Done()
}
Но если я буду делать что-то дальше, у меня будет болтаться в воздухе одна горутина которая в цикле ждет данных. Как её можно прибить? Отправить какое-то значение и выполнить break? Или есть более изящный способ?
Anonymous
if path == godead {
break
} else {
*slicePath = append(*slicePath, path)
}
Велосипед прям
Dmitry
Подскажите такой момент, набросал пример сбора файлов из 2-х дир, так то их может быть больше но не суть. Вот что получилось:
import (
"fmt"
"os"
"path/filepath"
"strings"
"sync"
)
func main() {
var slicePath []string
var wg sync.WaitGroup
var c chan string = make(chan string)
go collectionPath(&slicePath, c)
wg.Add(2)
go walkDir(C:\TEST_PATH\001, c, &wg)
go walkDir(C:\TEST_PATH\002, c, &wg)
wg.Wait()
fmt.Println(len(slicePath) - 2)
for _, path := range slicePath {
fmt.Println(path)
}
}
func collectionPath(slicePath *[]string, c chan string) {
for {
path := <-c
*slicePath = append(*slicePath, path)
}
}
func walkDir(path string, c chan string, wg *sync.WaitGroup) {
filepath.Walk(path, func(wPath string, info os.FileInfo, err error) error {
c <- strings.Replace(wPath, "\\", "/", -1)
return nil
})
wg.Done()
}
Но если я буду делать что-то дальше, у меня будет болтаться в воздухе одна горутина которая в цикле ждет данных. Как её можно прибить? Отправить какое-то значение и выполнить break? Или есть более изящный способ?
for path := range c {}
В основной функции после Wait:
close(c)
и желательно дождаться окончания горутины с collectionPath через еще один waitGroup или просто через закрытие еще одного канала
Anonymous
Anonymous
Anonymous
Anonymous
Dmitry
здесь мы блочимся пока collectionPath на выходе не закроет этот канал
Dmitry
тем самым дожидаемся что в slicePath больше ничего не будет добавляться и можно его печатать
Anonymous
Хех, забавно: https://play.golang.org/p/KjgKn2UrxC
Daniel
ну - какой-то контейнер, да
Anonymous
Dmitriy / დიმიტრი
Какие хорошие библиотеки есть для патча json'a?
Было бы классно, если туда можно было передать список полей, которые НЕ надо менять и функция возвращала бы ошибку, если эти поля собираются поменять.
Илья
Мерль
[last news]
Generate Enums for Go from Doc Comments
Илья
выглядит очень неплохо :)
Мерль
openebs/openebs: OpenEBS is containerized block storage written in Go for cloud native and other environments w/ per container (or pod) QoS SLAs, tiering and replica policies across AZs and environments, and predictable and scalable performance.
https://github.com/openebs/openebs
who
ребят, не подскажите. REST клиент из браузера отправляет и все ок.а этот кусок кода всегда получает 404.в чем может быть проблема?урл один и тот же.заголовки тоже
Daniel
так не бывает
Anonymous
Daniel
разница есть, или в uri, или в хосте, или в параметра
Daniel
а, еще метод может быть не тот
Anonymous
что скорее всего
Anonymous
если апи организовано верно, то скорее всего неверный урл
Anonymous
неверные заголовки доступа должны были дать 403
who
спасибо. буду искать дальше
Daniel
если у вас там без шифрования - нимите трафик tcpdump-ом, да посмотрите, в чем там разница
who
Anonymous
а body nil - это так и надо?
who
да. в теле ничего нет
Anonymous
вот хотя бы IDE видно нормальное )
плюшка от goglang c названиями аргументов тема.
Anonymous
Мужики, кто какой библиотекой пользуется для полнотекстного поиска?
Daniel
Библиотекой?
Daniel
Регекспов недостаточно?
Anonymous
к сожалению недостаточно, нужно сделать что-то типо живого поиска.
Anonymous
пробовал bleve, то ли я его не понимаю, как работает. толи лыжи не едут )
Anonymous
это же фича бд
Anonymous
sphinx самый норм
Daniel
Тогда не о библиотеке речь, а о продукте комплексном
Daniel
Токенизатор, обратный индекс, вот это вот все
Anonymous
ага,спасибо за новодку.
engelbart
>should not use basic type string as key in context.WithValue (golint)
почему?
Vasily
Чтобы случайно не было конфликтов, когда в другом месте проставится ключ с таким же значением, но другими данными
Oleksii
Vasily
Да, я
Oleksii
Да, я
Спасибо за хорошие уроки :)
Vasily
Пожалуйста ) Мы старались
Kirill
а что я там могу узнать?
Axm
скажите, плиз, есть ли более элегантный способ сделать вот это? код выглядит ужасно.
Daniel
а что делает этот код?
Axm
внутри себя некоторые вещи в итоге return http.ListenAndServe(:port, blabla)
engelbart
Народ. а нет ли у нас какой нить кросс-компиляции под древние машины?
/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found
Anonymous
я думаю можно в инете docker images найти
engelbart
Да нет там докреа на той машине
Aleksandr
как минимум старый glibc
Aleksandr
хотя докер идеальный вариант для этого