Anonymous
let me check it on my machine
Anonymous
ye i have done it
Anonymous
kinda easy
Anonymous
it was a cool practice btw
Anonymous
func (*server) Test(ctx context.Context, r *pb.Request) (*pb.Response, error) { fmt.Println("Test function") name := r.GetName() result := []string{"Hello", "World", "How Are You?"} result = append(result, name) return &pb.Response{Result: result}, nil }
Anonymous
above is a server code below is a client code
Anonymous
func test(c pb.TestServiceClient) { request, err := c.Test(context.Background(), &pb.Request{Name: "test"}) if err != nil { log.Fatal(err) } fmt.Printf("Requests: %v", request) }
Zohidbek Mengliboyev
Thank you very much, bro!
Andrey
Всем привет. Подскажите в каку. сторону посмотреть. Мне нужно в зависимости от настроек применять разные импорты . Тоесть у меня есть несколько папок с идентичными сгенерированными протобафами. и в зависимости от настройки мне нужно подключать либо один либюо другой путь. Можете подсказать как подобное можно реализовать ?
Anonymous
что за бредовая структура
Anonymous
зачем несколько одинаковых файлов с одной логикой
Andrey
это протобафы там не логика там структура головная которая потом логикой обрабатывается одинкаковая а не сами файлы с логикой одинаковые. мне надо обработать разные протобафы которые леджат в разных папках (и package у них разные)
Maria
здравствуйте, здесь можно размещать вакансии для go developers?
Кирилл
Добрый день, подскажите, пожалуйста, мне необходимо реализовать небольшой вебсервис, и для фронта нужно подтянуть статические html, js, css. папочная структура: service ├───cmd │ └───service ├───pkg │ ├───comments │ ├───errorPatterns │ ├───handlers │ ├───jwt │ ├───middleware │ ├───posts │ ├───session │ └───user └───static ├───css ├───html └───js main лежит в папке cmd/service. fileServer := http.FileServer(http.Dir("static/html/")) r.PathPrefix("/").Handler(fileServer) пытаюсь сделать так, но получаю белую страницу. вот такие зависимости и скрипты есть в html файле <link href="../css/main.74225161.chunk.css" rel="stylesheet"> <script src="../js/2.d59deea0.chunk.js"></script> <script src="../js/main.32ebaf54.chunk.js"></script>
Филипп
Всем привет. Подскажите, пожалуйста бесплатный курс по Go, для новичка
Art
Всем привет. Подскажите, пожалуйста бесплатный курс по Go, для новичка
Привет 👋🏼 По курсам не скажу, но сам начал с Head First Go ( Джей Макгаврен). Для начинающего (как я) очень понятно всё расписано.
Филипп
понял, спасибо!
Alexey
Всем привет. Подскажите, пожалуйста бесплатный курс по Go, для новичка
Лекции от mail.ru - https://www.youtube.com/playlist?list=PLrCZzMib1e9q-X5V9pTM6J0AemRWseM7I
G
Народ, можно ли в го импортировать пакет из соседней директории? Например, я использую типовой для всех проектов код эндпоинтов мониторинга приложения и чтения конфигурации, и я хочу это вынести в отдельный проект. Типа так: repository | +- project_a/ | +- go.mod | +- Makefile | +- src/ | +- ... | +- project_b/ | | | +- go.mod | +- Makefile | +- src/ | +- ... | +- common/ +- utils/ +- config/ +- monitoring/ +- ... Как такое принято делать в го? Через статические/динамические библиотеки? Или можно сразу собрать бинарник, который просто импортирует пакеты из указанной внешней директории?
Herman
A little copying is better than a little dependency.
Herman
подход go
G
А если оно разрастается до уже a lot of copying, то как это организуется?
Herman
ну а вообще можно создать модуль
Herman
если например фреймворк какой-то типа, то надо модуль делать
Herman
и через go get подключать
G
Ага. Понял, спасибо! А через go get можно подключить не что-то из интернетов, а ткнуть в локальную директорию относительным путём?
G
типа go get ../common/utils/config
G
Ну и там сделать свой go.mod и всё такое
Herman
а задача подтягивать именно не из интернетов?
Herman
я имел в виду как раз запушить и тянуть из интернетов
G
Ну, если в организации приватная библиотека, то можно обойтись без поднятия под это дело целого сервака, а просто вариться в обычном git-репозитории и с локальными файлами?
Herman
можно сделать отдельный приватный репозиторий с библиотекой
G
Понял, спасибо. Поковыряюсь
Herman
https://go.dev/doc/tutorial/call-module-code
DI
Добрый день. Так можно делать? exChan := make(chan string) drive.chan1 = exChan oth = NewOth(exChan)
DI
Имею ввиду это все нщн один канал?
Che
Да
G
https://go.dev/doc/tutorial/call-module-code
О, офигенно. Это то, что нужно было. Спасибо!
DI
Да
Тогда почему не работает? func (sync *Synchronizer) startSynchronizer() { for { fmt.Println("checkkkk") select { case <-sync.synchroTimer.C: fmt.Println("time of sync. send commands") sync.sendCommands() case answer := <-sync.answerChan: fmt.Println("[SYNCHRONIZER] Receive answer", answer) sync.parseAnswer(answer) } } }
Che
Возможно канал не инициализирован
DI
есть другой объект, в который передается тот же канал, что и sync.answerChan да записываются строки и здесь они должны как бы хвататься, но нет
Che
Но очень странный подход, что вы пытаетесь делать? Зачем таймер?
DI
func NewSynchronizer(connectorInfo core.AddressConnectorInfo) *Synchronizer { sync := new(Synchronizer) answerChan := make(chan string) sync.answerChan = answerChan sync.connector = NewConnector(connectorInfo, answerChan) sync.synchroTimer = time.NewTimer(time.Second * 5) go sync.startSynchronizer() return sync } да нет
DI
это таймер синхронизации для отправки команд
DI
что бы данные синхронизовались. ну это логика по такая, не суть. проблема в том, что если передать в канал, который передан в sync.connector, sync.answerChan не реагирует на эти данные
Che
А в канал то что то пишется?
DI
спарсенные строки case html.TextToken: text := string(tokens.Text()) if len(text) > 1{ fmt.Println ("LEN > 1", len(text), text) connector.answerChan <- text } }
DI
Разве что направления разные. Хотя не думаю, что это должно как то влиять на это в connector: chan<-string в sync: <-chan string
DI
Ахах. Сам того не заметив, создал циклическую зависимость
Melnikova
ребята всем привет никто тут работу, не ищет?🙃 а то мне рук не хватает в команде
Melnikova
если какие-то вопросы напишите в лс что вы из чатика со всеми поболтаем)
Timur
Ребят, вопрос возник по поводу получения больших responce.Body. Предположим ответ на запрос передаёт информацию на 100мб. При обычной отправке запроса ( http.Get(url) ) нужно ждать всех данных, а потом уже с ними работать. Подскажите, пожалуйста, как можно обрабатывать данные в этой ситуации по мере их поступления? Я слышал что-то про стримы в Go, но так и не понял куда копать по этому вопросу.
Timur
Хорошо, спасибо
Alexander
заголовки только целиком приходят
Maks
просто читаешь body кусками и все. ничего там не ждет полного получения. такое только в fasthttp
всмысле а если это гет запрос)))) Ты же сначала полный ответ дожидаешься обычно. Пока ответ не придет - сервер не ответил. Разве нет?
Alexander
только когда GETALL запрос
Anonymous
мужики вопрос
Anonymous
есть норм книжка/методичка по гиту?
Anonymous
500 страниц на гит?
Anonymous
алгоритмы на 200
Anonymous
ладно спс
mbb
https://youtube.com/playlist?list=PLDyvV36pndZFHXjXuwA_NywNrVQO0aQqb
Anonymous
да мне читать больше нравится
Anonymous
50 видео на гит
Anonymous
чему там учат?
Anonymous
как логиниться по токену?
mbb
Там они по 2-5 мин
mbb
Там все есть
Anonymous
окок спасибо всем
Anonymous
была такая классная методичка но я ее посеял
Anonymous
в чем разница в нет/хттп между дефолтным мультиплексером и newservemux?
Anonymous
что лучше юзать
Anonymous
а, я разобрался. гориллу/мух буду юзать ну и разницу понял ;)
Anonymous
I am willing to pay 300 usd for a single programmer to help me on a project. It's simple what to do. But I need a serious programmer on this to finish it in less than 1 day