Go 创建http处理程序
我有main.go,我想改成更好的结构(类似于main2.go),因为如果项目长大了,对新开发人员来说,代码的解释就不容易了 我的想法是创建一个名为handle的文件夹,并将文件handle.go和所有handles方法放在其中,我发现的问题是我不知道如何在handler.go中设置Go 创建http处理程序,go,Go,我有main.go,我想改成更好的结构(类似于main2.go),因为如果项目长大了,对新开发人员来说,代码的解释就不容易了 我的想法是创建一个名为handle的文件夹,并将文件handle.go和所有handles方法放在其中,我发现的问题是我不知道如何在handler.go中设置http.HandleFunc(“/R1”,HandlerOne)和http.HandleFunc(/R2),并从main2.go调用它 梅因,加油 package main import ( "fmt"
http.HandleFunc(“/R1”,HandlerOne)
和http.HandleFunc(/R2),并从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())
}
}
美茵2.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())
}
}
package main
import (
"fmt"
"net/http"
"handlers/handle"
)
func main() {
// Call handle.go
handle.SetUpMapping(...) // i dont know what parameter put here
err := http.ListenAndServe(":9998", nil)
if err != nil {
fmt.Printf("Server failed: ", err.Error())
}
}
去吧
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")
}
注意:
谢谢@kluig的回答。我想补充一点,我想说的似乎不是很清楚:
我想要的是在
handle.go在哪里可以放置所有句柄的映射。i、 我喜欢那样的人
func SetUpMapping(...){
http.HandleFunc("/R1", HandlerOne)
http.HandleFunc("/R2", HandlerTwo)
..... //Others mapping
http.HandleFunc("/RN", HandlerN)
}
在哪里。。。应该是http的一个引用,但这是一个包,基本上类似于代码3
代码3
美茵2.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())
}
}
package main
import (
"fmt"
"net/http"
"handlers/handle"
)
func main() {
// Call handle.go
handle.SetUpMapping(...) // i dont know what parameter put here
err := http.ListenAndServe(":9998", nil)
if err != nil {
fmt.Printf("Server failed: ", err.Error())
}
}
我把你的代码放到$GOPATH/handlers
文件夹中,把main2.go放到$GOPATH/handlers/handle
文件夹中。然后我换了主菜2.去吧
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())
}
}
它编译并运行良好。我相信这就是你要求的
更新
好的,你可以把这个加到你的把手上
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())
}
}
阅读基础知识:谢谢@Klug的回答,我添加了一条注释,更好地解释了我想要的内容。@carlosanderesgarcía好的,更新了我的答案。http就像对包http的“全局”引用,您不需要将其作为参数发送