Size: a a a

2020 October 07

A

Alisher in Go-go!
Alisher
conn, err := amqp.Dial("amqp://admin:admin@localhost:5672/")
 fmt.Println("Connected to RabbitMq")
 HandleError(err, "Failed to connect to RabbitMQ")
 defer conn.Close()

 ch, err := conn.Channel()
 HandleError(err, "Failed to open a channel")
 defer ch.Close()

 q, err := ch.QueueDeclare(
   "",    // name
   false, // durable
   false, // delete when unused
   true,  // exclusive
   false, // noWait
   nil,   // arguments
 )
 HandleError(err, "Failed to declare a queue")

 msgs, err := ch.Consume(
   q.Name, // queue
   "",     // consumer
   true,   // auto-ack
   false,  // exclusive
   false,  // no-local
   false,  // no-wait
   nil,    // args
 )
 HandleError(err, "Failed to register a consumer")

 corrID := string(14)
 var user Users
 e, err := json.Marshal(user)
 if err != nil {
   fmt.Println(err)
   return
 }
 err = ch.Publish(
   "",          // exchange
   "rpc_queue", // routing key
   false,       // mandatory
   false,       // immediate
   amqp.Publishing{
     ContentType:   "application/json",
     CorrelationId: corrID,
     ReplyTo:       q.Name,
     Body:          []byte(e),
   })
 HandleError(err, "Failed to publish a message")

 for d := range msgs {
   if corrID == d.CorrelationId {
     fmt.Println("Success")
     HandleError(err, "Failed to send message")
     break
   }
 }

 return
 forever := make(chan bool)
 // Initializing mux

 r := mux.NewRouter()

 // Creating endpoints for handlers

 r.HandleFunc("/api", FormHandler).Methods("OPTIONS", "POST")

 http.ListenAndServe(":8889", r)
 HandleError(http.ErrServerClosed, "Server didnt start")
 <-forever
here is my code, please correct me If i did something wrong here, which apparently I did something wrong
источник

Ф

Федор Панин... in Go-go!
Max Kot
Добрый день, что по golang почитать можно на русском?
Зависит от уровня. Сайта golangs.org хватить может
источник

MK

Max Kot in Go-go!
Тур прошёл давно ещё
источник

A

Alisher in Go-go!
Alisher
Hi there, Im new to go, and cant understand something, so basically I have two functions one is runnig <-forever however its blocking my second functions from being executer.
So the question is how can I do so It wont be blocking second func
how should I separate into functions so that I have RabbitMq running separately and my Server
источник

OK

Oleg Kovalov in Go-go!
Alisher
how should I separate into functions so that I have RabbitMq running separately and my Server
go http.ListenAndServe(":8889", r)
источник

A

Alisher in Go-go!
Oleg Kovalov
go http.ListenAndServe(":8889", r)
syntax error: unexpected go, expecting expression
источник

A

Alisher in Go-go!
что делать помогите пожалуйста
источник

SZ

Sergey Zhdanov in Go-go!
оберните нужные части в анонимную функцию, но начнутся другие проблемы скорее всего
источник

SZ

Sergey Zhdanov in Go-go!
go func() {
 // ваш код
}()
источник

ЯК

Ярослав Коробейников... in Go-go!
Alisher
syntax error: unexpected go, expecting expression
Может сервис RabbitMq запускать в горутине наборот?
источник

A

Alisher in Go-go!
Ярослав Коробейников
Может сервис RabbitMq запускать в горутине наборот?
думаете?
источник

A

Alisher in Go-go!
func Rabbit() {

 forever := make(chan bool)
 r := mux.NewRouter()

 // Creating endpoints for handlers

 r.HandleFunc("/api", FormHandler).Methods("OPTIONS", "POST")

 http.ListenAndServe(":8889", r)

 <-forever
}


go
Rabbit()
источник

A

Alisher in Go-go!
Alisher
func Rabbit() {

 forever := make(chan bool)
 r := mux.NewRouter()

 // Creating endpoints for handlers

 r.HandleFunc("/api", FormHandler).Methods("OPTIONS", "POST")

 http.ListenAndServe(":8889", r)

 <-forever
}


go
Rabbit()
вот так оказывается работает
источник

SZ

Sergey Zhdanov in Go-go!
нагуглите пример gracefull shutdown
источник

A

Alisher in Go-go!
Sergey Zhdanov
нагуглите пример gracefull shutdown
хорошо, сделаю спасибо
источник

AK

Alex Kharlamov in Go-go!
GOOS=linux GOARCH=amd64 go build -o ./jobservice -a -mod=vendor cmd/gojobs/*.go
если так компилить то в случае если в cmd/gojobs/ будут го файлы тестов их тоже скомпилит? или тест файлы игнорятся компилятором по дефолту?
источник

AK

Alex Kharlamov in Go-go!
есть конечно хороший вариант держать тест файлы в другой папке и не думать об этом вопросе, но мне просто интересно
источник

S

SulaFPV in Go-go!
Alex Kharlamov
GOOS=linux GOARCH=amd64 go build -o ./jobservice -a -mod=vendor cmd/gojobs/*.go
если так компилить то в случае если в cmd/gojobs/ будут го файлы тестов их тоже скомпилит? или тест файлы игнорятся компилятором по дефолту?
Если в названии *_test.go то игнорится
источник

AK

Alex Kharlamov in Go-go!
SulaFPV
Если в названии *_test.go то игнорится
ок, спс
источник

DS

Dmitriy Syrovatskiy in Go-go!
Всем привет!

Задумался над логированием  HTTP сервисов.
Хочется помимо стандартных time, level, msg:
⁃ писать имя сервиса в лог
⁃ писать request_id
Результат в вакууме:
time="2020-10-07T23:35:19+08:00" level=info service=payment request_id=u-u-i-d msg=blabla

Отлично приступаем:
⁃ берем любую либу логирования
⁃ в main создаем глобальный логер
⁃ тут же докидываем префикс с именем сервиса
⁃ создаем requestMiddleware
⁃ в нем на основе глобального логера создаем новый и докидываем в него request_id
⁃ передаем в хендлер через контекст
⁃ юзаем

Вопрос:
Это единственный адекватный способ?
В правильном ли направлении я думаю, те ли это дроиды?
источник