我有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)
}
答案 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())
}
}