创建http处理程序

时间:2014-04-10 15:57:35

标签: go

我有main.go,我希望改为更好的结构(类似于main2.go),因为如果proyect会长大,那么新代码开发人员的代码就不容易解释。

我的想法是创建一个名为handle的文件夹,并在其中放入带有所有句柄方法的文件handle.go,我发现的问题是我不知道如何设置http.HandleFunc("/R1", HandlerOne)和{{1在handler.go中,从main2.go调用它。

main.go

http.HandleFunc("/R2", HandlerTwo)

main2.go

package main

import (
    "fmt"
    "net/http"

)

func HandlerOne(w http.ResponseWriter, req *http.Request) {
    fmt.Println("message one")
}

func HandlerTwo(w http.ResponseWriter, req *http.Request) {
    fmt.Println("message two")
}

func main() {

    http.HandleFunc("/R1", HandlerOne)
    http.HandleFunc("/R2", HandlerTwo)

    err := http.ListenAndServe(":9998", nil)

    if err != nil {
        fmt.Printf("Server failed: ", err.Error())
    }
}

handle.go

package main

import (
    "fmt"
    "net/http"

)


func main() {

   // Call handle.go

    err := http.ListenAndServe(":9998", nil)

    if err != nil {
        fmt.Printf("Server failed: ", err.Error())
    }
}

注意: 谢谢@kluyg的回答。我想补充说我想要的似乎我不能很好地解释:

我想要的是在中创建一个功能 handle.go我在哪里可以放置句柄的所有映射。也就是那些

package handle

import (
    "fmt"
    "net/http"
)

func HandlerOne(w http.ResponseWriter, req *http.Request) {
    fmt.Println("message one")
 }

func HandlerTwo(w http.ResponseWriter, req *http.Request) {
    fmt.Println("message two")
}

where ...应该是一个refence的一个refence,但这是一个包,并在主要类似代码3

代码3

main2.go

func SetUpMapping(...){
    http.HandleFunc("/R1", HandlerOne)
    http.HandleFunc("/R2", HandlerTwo)

   .....  //Others mapping
    http.HandleFunc("/RN", HandlerN)

}

1 个答案:

答案 0 :(得分:1)

我接受了您的代码并将 main2.go 放入$GOPATH/handlers文件夹中,并将{strong> handle.go 放在$GOPATH/handlers/handle文件夹中。然后我将 main2.go 更改为

package main

import (
    "fmt"
    "net/http"

    "handlers/handle"
)

func main() {

    // Call handle.go

    http.HandleFunc("/R1", handle.HandlerOne)
    http.HandleFunc("/R2", handle.HandlerTwo)

    err := http.ListenAndServe(":9998", nil)

    if err != nil {
        fmt.Printf("Server failed: ", err.Error())
    }
}

它编译并正常工作。我相信这就是你所要求的。

<强>更新

好的,你可以将它添加到你的handle.go

func SetUpMapping() {
    http.HandleFunc("/R1", HandlerOne)
    http.HandleFunc("/R2", HandlerTwo)

    .....  //Others mapping
    http.HandleFunc("/RN", HandlerN)

}

然后在main2.go

package main

import (
        "fmt"
        "net/http"
        "handlers/handle"
)


func main() {

        // Call handle.go
        handle.SetUpMapping() // you don't need any parameters here
        err := http.ListenAndServe(":9998", nil)

        if err != nil {
                    fmt.Printf("Server failed: ", err.Error())
        }
}