Anonymous
type bResponse struct { Data struct { Event [1]event json:"events" } json:"data" } type event struct { Id string json:"id" } var bResp bResponse
Только единицу нужно было убрать и добавить строку выше
Mikhail
Всем привет, начал изучать go, вопрос такой у меня через cmd управляется go с различными командами а через терминал нет в VS code + подсказок нет при написании языка подскажите как настроить. Заранее спасибо.
Mikhail
И есть в go какой нибудь nodemoon как в node js чтобы сервер заного не запускать каждый раз ?
Maks
Что значит каждый раз?
Maks
Когда локально изменения внес?
Mikhail
Да
Mikhail
То есть сохранил и сразу же изменения на сервере
Maxim
То есть сохранил и сразу же изменения на сервере
Вы путаете компилируемые и интерпритируемые языки. GO - компилируемый. Можно автоматизировать скриптами деплоя.
Mikhail
Понял
Maxim
https://docs.drone.io/quickstart/cli/ я этим пользуюсь, легче жить и в продакшн потом с dev переходить с теме же сценариями.
Null
Go: вы должны знать это, прежде чем использовать Defer https://dev-gang.ru/article/go-vy-dolzhny-znat-eto-prezhde-czem-ispolzovat-defer-5vfvem6a0o/ @Golang_google
Anonymous
Go: вы должны знать это, прежде чем использовать Defer https://dev-gang.ru/article/go-vy-dolzhny-znat-eto-prezhde-czem-ispolzovat-defer-5vfvem6a0o/ @Golang_google
А в каких случаях используется эта функция? Объясните новичку, пожалуйста)
Denis
А в каких случаях используется эта функция? Объясните новичку, пожалуйста)
Например Чтобы можно было сразу после открытия соединения написать его закритие, но при этом в коде ниже пользоваться соединением, помогает лучше организовать код
Anonymous
Спасибо, посмотрю где мне может это пригодится
Anonymous
Например func() { f := file.Open() defer f.Close() f.Read() f.xxx f.yyy return }
А каким образом определяется после чего выполняется функция f.Close?
Denis
А каким образом определяется после чего выполняется функция f.Close?
Просто в языках без defer может появиться необходимость писать f.Close несколько раз, например func() { f.Open() try { f.Work() }catch(){ f.Close() return } f.Work2() f.Close() return } Хотя можно было бы сэкономить func() { f.Open() defer f.close() try { f.Work() }catch(){ return } f.Work2() return }
🔥
Спасибо, посмотрю где мне может это пригодится
Ты ещё посмотри про goto тоже полезная штука
Anonymous
Ты ещё посмотри про goto тоже полезная штука
Я его использовал в этом случае loop: .... goto loop
Emil
В вузе на плюсах нам говорили, что goto это моветон и подобное только в ассемблере без цикличных структур можно юзать. Всегда удивлялся, что в го его используют Не помню правда, на сколько функционал пересекается
Maxim
Например func() { f := file.Open() defer f.Close() f.Read() f.xxx f.yyy return }
Я бы тут так не делал. Линейный код. Defer это лишний jmp(переход), с проверкой всех defer по коду. Если нагрузка небольшая, то нормально, при высоко нагруженных, я бы старался избегать(если нет ответвлений и выходов до закрытия)
Maxim
Демоны построены на for бесконечном.
Шипулин
Всем привет, подскажите пожалуйста литературу для начинающих) та с которой можно начать изучение Go
Шипулин
благодарю
Anonymous
А я в книжке случайно увидел, очень понравилось и начал использовать)
Anonymous
Может я ошибаюсь, но мне кажется, что тут goto очень кстати
xasai.denet
здесь кстати цикл for и операторы break/continue
xasai.denet
Чем здесь бесконечный цикл отличается от этой конструкции с goto?
xasai.denet
тут энивей прерывание на чтение с клавиатуры, так что тут не бывать 100% нагрузки
Anonymous
здесь кстати цикл for и операторы break/continue
Мне было удобнее использовать goto. Да и выглядит это более красиво лично для меня
xasai.denet
В качестве небольшого куска кода и практики использования, наверное этому есть место. Но когда этот код будет состоять не из 20 строчек, люди не возлюбят читать ваши творения
Anonymous
Да ладно, это консольная считалочка, какая тут разница?)
xasai.denet
Для циклов старайтесь использовать подходящие конструкции(for break continue) Не зря ведь их придумали? Операторы goto и их метки, можешь применять когда будешь писать на ассембллере.
Anonymous
На Go всего неделю, так что могу где-то ошибаться
Anonymous
Трудно после питона привыкнуть к {}, поэтому использовал это, по привычке
Andrew
Go: вы должны знать это, прежде чем использовать Defer https://dev-gang.ru/article/go-vy-dolzhny-znat-eto-prezhde-czem-ispolzovat-defer-5vfvem6a0o/ @Golang_google
Если код жирный, то мелкий defer вряд ли сильно сыграет. А в мелком коде где .lock/.unlock какой-нибудь компилятор может всё это заинлайнить. Если внутри кода не создаются defer динамически, то все это свободно может лежать на стеке или вообще быть заинлайненым. Тем более что проц тоже может оптимизировать джампы предзагрузкой. У меня с defer другой прикол был. type foo struct { i int } func (f *foo) inc() int { f.i++ return f.i } func main() { f := foo{} defer fmt.Println(f.inc()) f.i = 100 } Ожидал увидеть 101, увидел 1
Andrew
ну потому что у тебя дефер создает свою переменную, хочешь увидеть 101, напиши так defer func() { fmt.Println(f.inc()) }()
Не понял насчет переменной. Если про f, то scope она не покидает. Если про f.inc, то согласен. А так я полез в спеку и прочитал что defer вычисляет функцию и её аргументы на этапе самого defer statement, то есть в defer регистрируется вызов Println(1)
Andrey
Не понял насчет переменной. Если про f, то scope она не покидает. Если про f.inc, то согласен. А так я полез в спеку и прочитал что defer вычисляет функцию и её аргументы на этапе самого defer statement, то есть в defer регистрируется вызов Println(1)
Можешь прочитать более подробно про defer) функция и выражения аргументов переданные в defer вычисляются в момент выполнения инструкции , но вот фактический вызов откладывается до завершения функции
Andrew
хотя я внимательнее прочитал твое сообщение выше..ты и сам разобрался)
А насколько тогда правильная практика писать defer { f() }() вместо defer f()? Я часто вижу код где даже простейшие функции defer-ят по первому способу, хотя второй меньше когнитивных усилий требует. Мне казалось что по первому способу только джуны делают, а может я чего-то не понимаю и на самом деле это подход сениоров? Получается первый подход безопаснее, тем более компилятору по барабану и он может первый способ переписать во второй, не создавая анонимную функцию/литерал. У меня-то в defer однострочник, поэтому проглядел, а линтер-правила на это дело нету: всё же x := f.inc() defer fmt.Println(x) более прозрачно чем defer fmt.Println(f.inc())
Andrey
А насколько тогда правильная практика писать defer { f() }() вместо defer f()? Я часто вижу код где даже простейшие функции defer-ят по первому способу, хотя второй меньше когнитивных усилий требует. Мне казалось что по первому способу только джуны делают, а может я чего-то не понимаю и на самом деле это подход сениоров? Получается первый подход безопаснее, тем более компилятору по барабану и он может первый способ переписать во второй, не создавая анонимную функцию/литерал. У меня-то в defer однострочник, поэтому проглядел, а линтер-правила на это дело нету: всё же x := f.inc() defer fmt.Println(x) более прозрачно чем defer fmt.Println(f.inc())
как по мне, правильно использование дефер, это не забыть закрыть, то что открыл (подключил/отключил, заблокировал/разблокировал) когда оборачиваешь в анонимную функцию, ну думаю что компилятор раскроет ее (тк она прямо аналог в других языках лямбда-функции), что иначе еще называют замыканием. если ты именно хочешь изменить объект после выполнения, то только так захватишь объект/переменную из функции первого класса
whois
Ребят, у кого-нибудь есть пример синглтона, который не юзает переменные на уровне пакета?
Maks
Чего?
Maks
Что ты черт побери такое несешь)
Μαριούπολη
кто может подсказать как это решить?) Начал знакомиться с докером и сразу ошибочка
Μαριούπολη
Μαριούπολη
Andrey
А тебя не смущает что даже IDE твой go mod красным просвечивает?)
Andrey
это значит, что он не добавлен в Git
А, вот как, спасибо. Я просто в VS Code работаю)
Μαριούπολη
в GOPATH не должно быть модулей.
Да, спасибо, нашел хорошую статью
George
Да, спасибо, нашел хорошую статью
много их. Например эта неплохо объясняет взаимоотношения GOPATH и модулей. https://levelup.gitconnected.com/using-modules-and-packages-in-go-36a418960556
Anonymous
авто мапперами пользуетесь? какой посоветуете?
whois
Ребят, скажите пожалуйста, а почему sub-benchmark запускается n+1 раз? Т.е., если я запускаю так: for _, bc := range benchCases{ b.Log(bc.name) b.Run(bc.name, func(b *testing.B) { for i := 0; i < b.N; i++ { b.Log("running: ", i) } }) } running: 0 running: 0 running: 1 .... Т.е. running: 0 - два раза повторяется
Sardor
Ребят, я правильно понимаю, что в x и y значение канала запишется после того, как обе горутины завершат свою работу? или вторая горутина будет ждать, пока завершится первая (но тогда, как я понимаю, отпадает их смысл) func main() { s := []int{7, 2, 8, -9, 4, 0} c := make(chan int) go sum(s[:len(s)/2], c) go sum(s[len(s)/2:], c) x := <-c y := <-c fmt.Println(x, y, x+y) }
Gameover
не, отработает любая из них и пройдет 1 чтение, а затем как вторая - второе
Gameover
хотя что там делается в этом sum конечно
Emil
Есть у кого опыт работы с дополненной реальностью? Я что-то смотрю все очень плохо по фреймворкам, только что-то в сторону компьютерного зрения есть
Emil
Да мне не принципиально, просто хочется что-то в направлении этом
Emil
Вот да, на питоне ещё наверняка куча всего и на плюсах, судя по гитхабу. Хотелось на го именно попробовать)
Maks
Ну по сути ты либо юзаешь то что есть, это вуффория, аркит и на андроиде не помню как зовется
Maks
И там смотришь че да как
Maks
Либо сам пишешь полностью)
Emil
Хм... Гляну списочек, спасибо. Я ещё давно на котлине смотрел, не приглянулось
Emil
На чем?
Emil
Спасибо Пасаны го делать фреймворк для ar на го))0)
Emil
(блин я слишком тупой но очень хочется)
Emil
Ну Долгая и веселая дорога)