🔥
https://golang.org/doc/gopath_code Вот это почитай
Konstantin
Доброе утро. Может кто подскажет, с чего начать изучать GO? Материалы какие-нибудь, ресурсы
🔥
Konstantin
антон
да, в гугле набиваешь книги голанг
антон
и всё
антон
потом читаешь, пишешь чонить. считай, выучил
Nikita
а может есть какая то современная книга?...а то все древние..а там как я понимаю какие то серьёзные изменения с го модулями произошли, правда я так и не понял что такое го модули)
антон
синтаксис не менялся
Null
Как в Golang работает конкурентность?
За профессиональными навыками приходите 23 августа в OTUS на demo-занятие «Concurrency patterns».
👉🏻За 1,5 часа вы разберете, как применять concurrency-паттерны на практике. Пройдете паттерны синхронизации данных, функции-генераторы и пайплайн, работу с многими каналами: or, fanin, fanout, etc.
Занятие является частью онлайн-курса «Golang Developer Professional» и даст вам возможность оценить уровень обучения.
🔥Для регистрации пройдите вступительный тест: https://otus.pw/lw5o/
антон
про модули прочитайте и всё
Nikita
так в том то и прикол...вот открываешь книгу..там всё по старому..как я понимаю..модули...это что то связанное с самим процессом компиляции и не понятно как было раньше , что изменилось и как нужно делать сейчас))
антон
сейчас надо добавить одну консольную команду перед работой
антон
раньше не надо было
Nikita
что то типа go mod init?
Nikita
а что означает в go mod init example.com/hello вот это example.com/hello?
антон
это если сразу хочешь на гитхабе репозиторий держать
Nikita
а если не хочу?..что туда писать?))
антон
щас так принято, чтоб на интервью было что показать
Nikita
просто можно написать go mod init hello?
антон
просто инит
Nikita
ну на интервью я не собираюсь)) я лично для себя..и вот ещё вопрос..если у меня 2 компьютера...я например писал на одном....сделал там go mod init , потом написал там хеллоуворлд, потом решил залить в гитхаб. Сделал там репозиторий залил, то чтобы работало на другой машине, я сделал git pull и на новой машине тоже нужно делать go mod init?
антон
там будет go.mod же
Nikita
вот да...файл был...
Nikita
но он вроде не запускался)
Nikita
сейчас попробую сделать тестовую..
Nikita
просто в старых книгах вообще про это ничего нет, а в статье на хабре..просто какие то настолько далекие для меня случаи, что ничего не понятно))
𝕌ℕ𝔼𝕏ℙ𝔼ℂ𝕋𝔼𝔻
Nikita
то есть для того чтобы запустить проект на другом компьютере ничего не нужно делать и просто нажать ctrl+f5 в вскоде?
𝕌ℕ𝔼𝕏ℙ𝔼ℂ𝕋𝔼𝔻
Nikita
но чет у меня так не получалось...и я там какую то магию делал)
𝕌ℕ𝔼𝕏ℙ𝔼ℂ𝕋𝔼𝔻
go.mod хранит в себе зависимости, и если на другой машине не хватает этой зависимости, он её должен скачать.
Nikita
откуда он может её скачать?
Nikita
я не использую ничего с гитхаба))..и это только мой модуль..там fmt.Println()
𝕌ℕ𝔼𝕏ℙ𝔼ℂ𝕋𝔼𝔻
Опять же, локально я go.mod не юзаю, если планирую в Docker запускать, тогда да, пишу Dockerfile и делаю init go.mod
𝕌ℕ𝔼𝕏ℙ𝔼ℂ𝕋𝔼𝔻
Nikita
так и я не знаю..и не понимаю что это...может оно мне и не нужно совсем
Nikita
везде пишут - нужно делать так)
Nikita
но почему и зачем нигде не пишут)
Nikita
так вот)
Nikita
Nikita
я даже не могу запустить то что написал..он говорит go.mod не найден
Nikita
то есть без го модулей ничего нельзя сделать
𝕌ℕ𝔼𝕏ℙ𝔼ℂ𝕋𝔼𝔻
🔥
Nikita
gopath настраивается как то отдельно?..нужно что то делать кроме инсталла?
𝕌ℕ𝔼𝕏ℙ𝔼ℂ𝕋𝔼𝔻
𝕌ℕ𝔼𝕏ℙ𝔼ℂ𝕋𝔼𝔻
🔥
Ты переменную что я написал настрой
Nikita
Nikita
там есть папки bin и pkg
𝕌ℕ𝔼𝕏ℙ𝔼ℂ𝕋𝔼𝔻
Nikita
а этот сет где нужно писать?...в launch.json?
𝕌ℕ𝔼𝕏ℙ𝔼ℂ𝕋𝔼𝔻
Chshr
Вопрос к знающим:
Пакет: "os/exec"
Задача: Убить процесс и все саб-процессы через context.WithTimeout(...), который передаётся в
cmd := exec.CommandContext(ctx, name, args...)
cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
if err := cmd.Run(); err != nil {
if ctxErr := ctx.Err(); ctxErr != nil {
if ctxErr == context.DeadlineExceeded {
err = errors.New("operation timeout exceeded")
} else {
err = errors.New("operation canceled")
}
}
return err
}
Но по истечению времени exec посылает только один сигнал kill(pid) первого процесса, но не посылает сигнала для всей группы процессов(Которая имеет идентификатор -pid, kill(pid)). Из-за этого приходится юзать трюк
if killErr := syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL); killErr != nil{
err = fmt.Errorf("%s, but we can't kill process err: %s", err.Error(), killErr.Error())
}
Можно ли как-то избежать трюка и остаться с контекстом наедине?
UPD: в офф пакете и на гхб ответа не нашёл :\
🔥
Ты переменные среды не знаешь что такое?)
Nikita
а что именно там нужно настроить?
🔥
Переменную
Nikita
так она же есть
🔥
Не ну это
🔥
По умолчанию модули включены
Nikita
.
ааа..то есть вы предлагает сделать недефолтные настройки операционной системы, вместо того чтобы инициализировать модуль?...и так придется делать на каждом компьютере где я захочу запустить свое приложение?
🔥
🔥
И ее настройки)
Nikita
переменные среды - это настройка ОС, а не программы
🔥
Nikita
мне нужно строчку в консольку вывести на трех разных компах)
Nikita
и чтобы это минимально касалось ОС)
🔥
Для этого нужно выключить модули и скомпилить бинарь)
Maks
А где ??
package main
import "fmt"
Chshr
🔥
Компилятор читает переменную GO111MODULE и если она включена компилит с модулями)
🔥
Если нет, компилит без модулей