Dark
Из этого следует что нейминг main.go лучше не использовать, к примеру мы сделаем такой path: ./cmd/myapp/myapp.go, в таком случае проблем с именем бинарника не будет, но такой патч меня лично смущает), как-то не красиво, повторяется myapp
Dark
В случае go build проблем нет, но go install?
Dark
Команда go install тоже не отъемлемая часть, очень полезная в случае глобальной установки)
Dark
путь к репе
Dark
module github.com/...
Dark
Считаю что не красиво, когда имя директории и имя файла в ней одно и тоже, тут теряется смысл директории
Dark
Кастыльно выглядит)
Dark
Согласен, так можно, но не будет ли тут проблем с несколькими бинарниками?
Dark
даже docker, сделал в директории)
Vladimir
Подскажите. На винде запускаю програмку go run ./cmd/app/main.go, потом убиваю процесс Ctrl +c. Консоль освобождается, но процесс main продолжает висеть в диспетчере задач. Почему может не прибиваться?
Alexander
Alexander
Vladimir
Первое что в голову лезет обработать через контекст и сигналы ОС, но звучит сложно для такой проблемы
Alexander
Alexander
Vladimir
Понятно. Как я и думал. Спасибо!
Рик
кринжятина
Sergey
/help@banofbot
Sergey
@banofbot
Sergey
Кринж в проф сообществах политоту разводить
Sergey
У каждого из нас есть своё отношение к сложившейся ситуации. Тут не чат про политику. Тут чат про специалистов. Давайте превратим его в балаган
Sergey
Ну если он не китаец, то мог бы и не писать сюда) я просто с 99% вероятностью уверен что это кампания по пропаганде. Я такие сообщения уже ни в одном чате видел
Sergey
Да и инструмент есть, чего админов напрягать лишний раз
Anonymous
Vladimir
Да я все пытаюсь через errgroup, но не выходит(
Как будто не обрабатывает сигнал.
Даже тупо копипаста примеров из интернета не работает
Anonymous
через канал можешь сделать
ch := make(chan, os.Signal, 1)
signal.Notify(ch, os.Interrupt)
<-ch
lis.Close()
с телефона пишу, но вроде так
Vladimir
Не отрабатывает все равно
Alexander
Vladimir
Я упростил как мог:
l, err := net.Listen("tcp", fmt.Sprintf(":9000"))
if err != nil {
panic(err)
}
grpcServer := grpc.NewServer()
pb.RegisterTestServer(grpcServer, &handlers.Handler{})
fmt.Println("Start GRPC Server")
if err := grpcServer.Serve(l); err != nil {
panic(err)
}
ch := make(chan os.Signal, 1)
signal.Notify(ch, os.Interrupt)
<-ch
fmt.Println("Close GRPC Server")
l.Close()
Vladimir
Да. Блин
Vladimir
тогда разве это лочить не будет:
signal.Notify(ch, os.Interrupt)
<-ch
Если закинуть ДО, сервер вообще не стартует
Vladimir
Не помогло)
Vladimir
func main() {
l, err := net.Listen("tcp", fmt.Sprintf(":9000"))
if err != nil {
panic(err)
}
defer func() {
l.Close()
}()
grpcServer := grpc.NewServer()
pb.RegisterTestServer(grpcServer, &handlers.Handler{})
go func() {
ch := make(chan os.Signal, 1)
signal.Notify(ch, os.Interrupt)
<-ch
fmt.Println("Close GRPC Server")
l.Close()
}()
fmt.Println("Start GRPC Server")
if err := grpcServer.Serve(l); err != nil {
panic(err)
}
}
Anonymous
зачем тут горутина
Vladimir
Видимо, чтобы в фоне ждать os.Signal, и если он пришел - закрыть соединение
Anonymous
зачем
Vladimir
Anonymous
почему у тебя горутина закрывает соединение и еще дефер тоже самое делает
Vladimir
Дефер забыл убрать.
Сейчас это в main. Дефер этот никогда не отработает
Anonymous
lis, err := net.Listen("tcp", "50051")
if err != nil {//dial with error}
opts := []grpc.ServerOption{}
s := grpc.NewServer(opts)
deadOrNot.RegisterDeadServiceServer(s, &server{})
go func() {
fmt.Println("Starting server")
if err := s.Serve(lis); err != nil {//dial with err}
}()
ch := make(chan os.Signal, 1)
signal.Notify(ch, os.Interrupt)
<-ch
lis.Close()
Anonymous
после ктрл + с сразу умирает процесс на винде
Anonymous
не читал весь диалог, но вроде ты про это спрашивал
Anonymous
да и грпс сервак по дефолту на 50051 работает, а не на 9000
Anonymous
мало-ли у тебя хадуп будет на 9000 висеть
🅞leksiy
А че там было?
🅞leksiy
Ну тот чел писал что-то
🅞leksiy
Просто его забанили и сообщения нет
🅞leksiy
Ааа
Vladimir
после ктрл + с сразу умирает процесс на винде
Да)
Запуская go run ./cmd/app/main.go - создается main.exe в процессах и консоль "виснет" на процессе
Однако делая Ctrl+C, консоль "Отвисает", а вот процесс не убивается и продолжает висеть
Anonymous
ох уж эта винда
Vladimir
Даже больше.
Делая `go run ./cmd/app/main2.go`создается 2 процесса:
- go.exe
- main.exe
Делая Ctrl+C - процесс go.exe умирает, а вот main - нет
Vladimir
короче откажусь от run, буду через build делать
Anonymous
ну можно костыль сделать через exec
Вильям
Вильям
Что ты печатаешь
Anonymous
после запуска, серчишь процесс по названию и убиваешь
Anonymous
ну это костыль типа
Вильям
Такое бывает, когда начинаешь работать с БД или Клиент-сервером
Anonymous
так а чего вы хотели?
Anonymous
вы в одном окне терминала запускаете сервак и хотите с ним еще работать?
Anonymous
поднимайте докер тогда в фоновом режиме
Вильям
Я ничего, комп на продаже, буду мак брать, это бред полнейший с виндой
Vladimir
Бля.... Сработало
Anonymous
xDDDDDDD
Вильям
Vladimir
я через Moba Bash запускал
Vladimir
Пойду верну все на контексты и errgroup'ы)
Vladimir
Спасибо
Alexander
а go version вызови как в обоих терминалах
Alexander
и go env
Alexander
А есть аналоги гит хаба в ру сегменте?
Alexander
а у Ильи?
an112
@kenerase ну чо, нашел работу?
Anonymous
забросил кодинг, пошел на завод