Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Dec 21 2016 13:31
    @listochkin banned @MayyaLitvina
  • Mar 15 2015 01:09
    User @mr-mig banned @putin-hero from this room
  • Mar 15 2015 01:08
    User @mr-mig banned @stepan-bendera from this room
Alexey Palazhchenko
@AlekSi
4gophers.ru/slack – это вход в Slack golang-ru

Просто банить

Банили по формальному признаку – за мат

В общем, я недостаточно помню ситуацию, но отвечать наездом с матом на наезд не стоит
@listochkin А есть какой-то другой Slack?
People are complicated. You should expect to be misunderstood and to misunderstand others; when this inevitably occurs, resist the urge to be defensive or assign blame. Try not to take offense where no offense was intended. Give people the benefit of the doubt. Even if the intent was to provoke, do not rise to it. It is the responsibility of all parties to de-escalate conflict when it arises.
vedun
@vedun
@AlekSi есть ещё https://golang-ua.slack.com наверно речь о нём
Alexey Palazhchenko
@AlekSi
о, круто :) спасибо
Андрей Листочкин (Andrey Listochkin)
@listochkin
@AlekSi я про ваш слак и говорил
Yuriy Yarosh
@yuriy-yarosh
@AlekSi меня забанили в golang-ua ...
Ок... видимо по общей договорённости, банально из-за зависти и потребности облить дерьмом, меня забанили и в golang-ru.
Alexey Palazhchenko
@AlekSi
Что за попытка сделать из себя жертву?
Я так понимаю, что тебя и не было в golang-ru, и тебя не добавят пока что, потому что ты тут матом писал, а я подумал, что это тебя в golang-ru забанили. И даже вспомнил какую-то подобную ситуацию. Забавно.
Ну, ничего, мы уже скоро сделаем вход для всех
Yuriy Yarosh
@yuriy-yarosh
%)
Мне просто несколько дней вподряд писали всякие... меня это достало.
Maksim
@maksimmysak
Как вы тестируете приложения на go на нагрузку ?
Yuriy Yarosh
@yuriy-yarosh
@maksimmysak pprof типа так https://habrahabr.ru/company/badoo/blog/324682/
https://github.com/hagen1778/fasthttploader от верты
https://github.com/codesenberg/bombardier от яндыкса
Чаще всего использую
https://github.com/tsenart/vegeta
Если нужно что-то серьёзнее - надо лезть в dpdk и pktgen
Alexey Palazhchenko
@AlekSi
Maksim
@maksimmysak
@AlekSi @yuriy-yarosh Спасибо!
skliarovartem
@skliarovartem
всем привет! подскажите можно ли в mgo делать insert multiple ?
есть слайс, нужно залить в бд. неужели нужно каждый айтем отдельно заливать? 0___о
Yehor Nazarkin
@nimnull
в v2 можно, кроме того, есть Bulk операции
но его нужно распаковать
Maxim Kolesnikov
@xCASx

Привет! Помогите разобраться с концепцией GOPATH.
 Допустим, структура проекта такова:


.
├ main.go
└ service
  └ myservice.go

Какие есть пути, чтобы в main.go импортировать myservice.go?

Anton Lempiy
@lempiy

@xCASx из примера golang.org https://golang.org/doc/code.html
допустим указанная выше структура лежит под $GOPATH/src/github.com/user/mymain тогда импорт service в main.go будет следующим:

import (
    "github.com/user/mymain/service"
)

Конечно же это сработает при условии, что имя пакета в myservice.go будет - service.
Смисл в том, что при такой структуре локальный путь к пакету дублирует remote url что дает возможность с легкостью применить go get на каждый из пакетов.
Есть возможность использовать относительные пути к пакетам не под gopath, но это считается bad practice.

Maxim Kolesnikov
@xCASx
@lempiy спасибо за пояснение. Эта часть мне ясна. Чего я не могу понять:
  1. Допустим я только начинаю разработку и у меня еще нет репы. При этом я уже хочу, чтобы мои зависимости нормально резолвились. Выходит, мне надо либо копировать сорцы в глобальный $GOPATH, имитируя таким образом go get, либо задавать $GOPATH ссылающийся на директорию проекта, при этом проект теперь обязан находиться в директрии src?
  2. Если завтра кто-то захочет собрать у себя проект, ему не только git clone надо сделать, но и вызвать go get (на каждый импорт?), либо прописать $GOPATH к только что склонированному проекту?
  3. Как задавать импорт, если это не гитхаб репозиторий, а, скажем, битбакет? На примере существующего репозитория я вижу такой URL-темплейт:
    https://{servername}/projects/{project_name}/repos/{repo_name}/browse/{folder_name}
    Здесь {folder_name} это наша папка service. И что, мне структуру пакетов завязывать вот на эту жесть с browse и прочим хламом?
  4. Если завтра проект переедет с битбакета на гитхаб, мне надо будет обновить все импорты?
  5. Я не разработчик библиотеки и не ожидаю, что кто-то будет вытягивать мой код с помощью go get. Значит мне все эти завязки на репозитории не нужны и я могу просто использовать относительные пути?
Сорян за обилие вопросов, но пока у меня эта концепция в голове не очень помещается.
Anton Lempiy
@lempiy
Я сам не особо опытный в Go, но тебе никто не отвечал, а потому попробовал ответить. По поводу твоих вопросов: (Надеюсь, тебе здесь дадут более точные/правильные ответы)
  1. Тебе ничего не мешает просто иметь папку под $GOPATH без указания ремоут пути. Тоесть
    $GOPATH/src/your_folder
    Но сорц код лучше держать под одним $GOPATH.
  2. git clone в $GOPATH/src/ + go get без аргументов в папке с main.go должно быть достаточно. Также для менеджмента зависимостями есть много сторонних библиотек которые работают по описанному тобой принципу с отдельным $GOPATH, например govendor.
  3. см 1.
  4. Завязки на репы можно скипнуть но так лучше не делать:
    import (
    "./service"
    )
    то есть лучше:
    "myfolder/service"
    под гопаз
@xCASx ^
Maxim Kolesnikov
@xCASx
@lempiy так а в чем проблема с относительными путями?
Maxim Kolesnikov
@xCASx
@lempiy меня просто очень смущает второй пункт. То, что мне надо делать git clone в $GOPATH/src/.
У нас моно репозиторий. Куча модулей на разных языках, преимущественно java. Если я это все склонирую, то мне даже тяжело представить что может произойти. Долбаться со sparse checkout не хотелось бы.
Опять же, вести всю разработку в $GOPATH/src/ как-то странно. Он у меня и источник зависимостей и рабочий проект одновременно. А если этого не делать, то мне каждый репозиторий надо клонировать по два раза: в рабочую директорию и в $GOPATH/src/. При этом надо не забывать последний поддерживать в актуальном состоянии.
Я понимаю, что проблема заезженная, поэтому всем лень отвечать, но хоть ссылкой в меня киньте, где это нормально объяснено.
Yuriy Yarosh
@yuriy-yarosh

@xCASx

1 Допустим я только начинаю разработку и у меня еще нет репы.

Ты просто делаешь mkdir -p $GOPATH/src/github.com/xCASx/dummyproj идешь туда и стартуешь новый проект

ча модулей на разных языках, преимущественно java. Если я это все склонирую, то мне даже тяжело представить что может произойти.

Есть vendor и ты можешь использовать нормальный пакетный менеджер, я использую glide

Опять же, вести всю разработку в $GOPATH/src/ как-то странно.

Общепринятая практика, просто надо привыкнуть - погоды не делает.
Пускай $GOPATH/src/ и является твоей рабочей папкой...

Долбаться со sparse checkout не хотелось бы.

Тут такого нету - никто не клонит один проект в два места.

Если ты хочешь отказаться от $GOPATH/src то тебе придётся клонить твой проект submodule'ом в vendor и там его ещё и .gitignore'ить %)
Что будет ещё более костыльно и неприятно.

Anton Lempiy
@lempiy
@yuriy-yarosh :+1:
Yuriy Yarosh
@yuriy-yarosh

Если завтра кто-то захочет собрать у себя проект

Пускай используют пакетный менеджер

Здесь {folder_name} это наша папка service. И что, мне структуру пакетов завязывать вот на эту жесть с browse и прочим хламом?

У гита были alias'ы вроде как... а структура действительно вырвиглазная.

Если завтра проект переедет с битбакета на гитхаб, мне надо будет обновить все импорты?

Да. Но ты можешь заюзать православный find . | sed -i '' ...

Значит мне все эти завязки на репозитории не нужны и я могу просто использовать относительные пути?

Нужны так как в golang'e запрещён циклический импорт - ты не можешь в пакете А заимпортить пакет Б, а в пакете Б заимпортить пакет А.

Maxim Kolesnikov
@xCASx
@yuriy-yarosh спасибо! Просто как-то много церемоний получается. Мне надо проект из трех файлов собрать, а я уже два дня разобраться не могу как же оно должно быть правильно.
Yuriy Yarosh
@yuriy-yarosh
Можешь писать мне сюды https://discord.gg/8dFGXrx или прямо в скайп %)
Помогу по возможности ...
Maxim Kolesnikov
@xCASx
@yuriy-yarosh благодарю ;)
Maxim Kolesnikov
@xCASx
Подскажите, в го есть поддержка интерсепторов, или мне надо самому написать обертку и заворачивать в нее каждый хендлер?
TarasZak
@taras-zak

Ребят, подскажите, как правильно в Го сделать словарь с мьютексами, что-то типо такого

mutexes = map[string]*sync.Mutex 
mutexes[key].Lock()

defer mutexes[key].Unlock()

Есть поток ключей, который слушают горутины, и нужно чтобы одинаковые ключи обрабатывались только одной горутиной. Т.е. если пришло 2 одинаковых ключа подряд, их взяли две разные горутины, но вторая ждет мьютекса.

Yuriy Yarosh
@yuriy-yarosh
@taras-zak тебе нужен RWLock а не мьютексы ...
@xCASx нету, если очень нужно - лучше запилить на горутинах.
... с горутинами напрягает отсутствие backpressure control :(
Maxim Kolesnikov
@xCASx
@yuriy-yarosh ну я наклепал в итоге обертку и в нее заворачиваю. Авторизацию ж надо как-то делать...
Yuriy Yarosh
@yuriy-yarosh
Авторизация дело тонкое
Я вот на React Kiev готовлю доклад про релешку ... там очень оригинально авторизация выполняется
Maxim Kolesnikov
@xCASx
@yuriy-yarosh мне не надо оригинально. Мне надо просто и чтоб работало :D
TuxUbuntu
@TuxUbuntu
привет, ребята, подскажите, что я делаю не так:
запускаю в папке с исходниками go test _test_Source.goа мне выдаёт can't load package: package main: no buildable Go source files in /go/src/mirror
Alexey Palazhchenko
@AlekSi
не надо так файл называть