gpt4 book ai didi

http - 无法从命令行访问 go 服务器/将 web 服务器逻辑添加到现有代码

转载 作者:数据小太阳 更新时间:2023-10-29 03:22:42 24 4
gpt4 key购买 nike

在我的第一次迭代中,我得到了以下编译和工作:

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 个 channel 来执行 goroutine routineHandle

现在,我想添加执行以下操作的 Web 服务器功能:

  • 监听端口并接受/返回请求
  • Hook 到 routineHandle,这样我们就可以将该 goroutine 用作 Api 服务器方法

我的代码在没有图形用户界面的 linux 机器上,所以我不知道如何测试网络服务器功能。

我的代码如下所示:

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 监听器 添加到 main 方法
  • 我向 ping 函数添加了响应编写器和请求参数
  • 我从 fmt.Println() 更改为 c.Write

最终目标是输入查询,然后在 routineHandle goroutine 中使用该查询

正如我所说,我不知道如何在没有 gui 的 ubuntu box 上测试这个最终实现

最后一件事要注意。如果您发现任何问题告诉我。我想知道在 http 服务器中运行 goroutine 是否会导致问题

最佳答案

问题中的代码错误地使用了 WaitGroup (wait 和 done 应该交换,该组不应该全局共享)并且与 channel 冗余。删除 WaitGroup 的使用以修复代码。

package main

import (
"net/http"
)

func routineHandle(query string, ch chan<- string) {
ch <- query
}

func ping(w http.ResponseWriter, r *http.Request) {
ch := make(chan string)
go routineHandle("testquery", ch)
msg := <-ch
w.Write([]byte(msg))
}

func main() {
http.HandleFunc("/", ping)
http.ListenAndServe(":1234", nil)
}

关于http - 无法从命令行访问 go 服务器/将 web 服务器逻辑添加到现有代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50746818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com