В моей первой итерации я получил следующее для компиляции и работы:
package main
import (
"fmt"
"sync"
)
var wg sync.WaitGroup
func routineHandle (query string, ch chan <- string) {
ch <- query
wg.Wait()
}
func ping () {
ch := make(chan string)
wg.Add(1)
go routineHandle("testquery",ch)
wg.Done()
msg := <-ch
fmt.Println("Channel Message",msg)
}
func main () {
ping()
}
Это успешно использует 1 канал для выполнения goroutine routineHandle
Теперь я хочу добавить вебВозможности сервера, которые выполняют следующие функции:
- Прослушивает порт и принимает / возвращает запросы
- Подключает к рутине рутина, чтобы мы могли использовать эту программу в качестве метода сервера Api
Мой код на linux box без графического интерфейса, поэтому я не знаю, как проверить возможности веб-сервера.
Мой код выглядит следующим образом:
package main
import (
"fmt"
"sync"
"net/http"
)
var wg sync.WaitGroup
func routineHandle (query string, ch chan <- string) {
ch <- query
wg.Wait()
}
func ping (w http.ResponseWriter, r *http.Request) {
ch := make(chan string)
wg.Add(1)
go routineHandle("testquery",ch)
wg.Done()
msg := <-ch
//fmt.Println("Channel Message",msg)
w.Write([]byte msg)
}
func main() {
http.HandleFunc("/",ping)
http.ListenAndServe(":1234",nil)
}
Вы заметите несколько дополнений с моим вторым фрагментом кода:
- Я добавил
net/http
package - Я добавил
http listener
в main method
- Я добавил средство записи ответов и параметры запроса в функцию ping
- Я изменил с
fmt.Println()
на c.Write
Конечной целью было бы ввести запрос и затем использовать этот запрос в routineHandle
goroutine
Как я и сказал, Я не знаю, как протестировать эту окончательную реализацию на ubuntu box without a gui
И последнее, на что следует обратить внимание.Если вы заметили какие-либо проблемы ПОЖАЛУЙСТА , дайте мне знать.Интересно, если запуск goroutine внутри http-сервера вызовет проблему