在我的第一次迭代中,我得到了以下编译和工作:
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
现在,我要添加执行以下操作的Web服务器功能:
-
侦听端口并接受/返回请求
-
钩住routinehandle,这样我们就可以将goroutine用作api服务器方法
我的代码在没有gui的linux机器上,所以我不知道如何测试web服务器的功能。
我的代码如下:
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
包裹
-
我添加了
http listener
到
main method
-
我向ping函数添加了响应编写器和请求参数
-
我改变了
fmt.Println()
到
c.Write
最终目标是输入一个查询,然后在
routineHandle
戈鲁廷
就像我说的,
我不知道如何在
ubuntu box without a gui
最后一点要注意。如果你注意到任何问题
拜托
告诉我。我想知道在http服务器中运行goroutine是否会导致问题