“函数主体外的非声明语句”错误golang

时间:2018-07-28 13:47:00

标签: go

我的http func方法在函数体错误之外始终收到未声明的语句。我不确定为什么在修复了一些全局变量后仍然会出现这种情况。

    package main

import (
  "net/http"
  "github.com/gorilla/websocket"
)

var audioMessage   []byte
var whatType       int
var recieverReady  bool

http.HandleFunc("/send", func(w http.ResponseWriter, r *http.Request) {
  conn, _ := websocket.Upgrade(r, w)

  go func(){
        for {

      messageType, revdata, err := conn.ReadMessage()

      if recieverReady {
        audioMessage <- revdata
        whatType     <- messageType
      }
    }
    }()
})

2 个答案:

答案 0 :(得分:4)

http.HandleFunc()是http中的一种方法。您不能只是将其放在函数之外。就像在函数外部编写strings.Compare(a,b)

它本身不是函数声明。

执行此操作的正确方法是将此方法包含在main方法(或其他方法)中。为了清楚起见,您可以将匿名函数(那里有func(w http.ResponseWriter, r *http.Request)移到命名函数。

示例:

func send (w http.ResponseWriter, r *http.Request) {
  conn, _ := websocket.Upgrade(r, w)
  go func(){
    for {
      messageType, revdata, err := conn.ReadMessage()

      if recieverReady {
        audioMessage <- revdata
        whatType     <- messageType
      }
    }
  }()
}

func main () {
  http.HandleFunc("/send", send)
}

不过请不要忽略该错误。

答案 1 :(得分:1)

将您的http.HandleFunc放入func main() {}