首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法从命令行访问go服务器/将web服务器逻辑添加到现有代码

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

Stack Overflow用户
提问于 2018-06-08 01:13:24
回答 1查看 52关注 0票数 0

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

代码语言:javascript
复制
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()
}

这成功地使用了一个通道来执行goroutine routineHandle

现在,我想添加执行以下任务的web服务器功能:

  • 侦听端口并接受/返回请求
  • 钩子到routineHandle中,因此我们可以将该goroutine用作Api服务器方法

我的代码在没有gui的linux机器上,所以我不知道如何测试web服务器的能力。

我的代码如下所示:

代码语言:javascript
复制
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)
}

您将注意到我的第二段代码中添加了一些内容:

  • I添加了net/http
  • I向main method
  • I添加了http listener向ping函数添加了响应编写器和请求参数
  • I从fmt.Println()更改为ping

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

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

最后要注意的一件事。如果你注意到任何问题,请让我知道。我想知道在http服务器中运行goroutine是否会导致问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-08 04:11:21

问题中的代码不正确地使用等待组(等待和完成应该交换,组不应该全局共享),并且与通道冗余。删除使用等待组修复的代码。

代码语言:javascript
复制
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)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50746818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档