GO开发:搭建HTTP服务器DEMO
package main
import (
"net"
"net/http"
)
var listenaddr = "127.0.0.1:8888"
/* 自定义的符合Handler接口要求的结构体 */
type HttpHandler struct {
signature string
}
/* HttpHandler结构体实现http.Handler接口所必须的方法 */
/* 这里是处理http请求的逻辑,只使用switch case做展示用,实际使用可能会想要使用更高级的路由库,如gorilla/mux,它提供了更灵活和强大的路由功能 */
func (h *HttpHandler) ServeHttp(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "ServeHttp. signature=%s", h.signature)
switch r.Path {
case "/":
fmt.Fprint(w, "Home Page")
case "/help":
fmt.Fprint(w, "Help Page")
default:
http.Error(w, "404 Not Found", http.StatusNotFound)
}
}
/* 创建http服务器结构体实例 */
func httpListener() (*http.Server) {
// 创建一个Handler结构体实例
httpHandler := &HttpHandler{signature: "chagee"}
// 用于表示HTTP服务器的核心组件
server := &http.Server{
Addr: listenaddr, // 指定服务器监听的地址和端口
// Handler接口类型,是所有请求需要调用到的处理器,通常是
// 1. 函数类型:http.HandlerFunc(http.ResponseWriter, *http.Request)
// 2. 方法:实现了http.HandlerFunc函数类型(签名)的接口
// 3. 结构体指针:需要拥有符合Handler接口要求的方法
Handler: httpHandler,
}
return &server
}
func RunHttpServe() {
httpServe := httpListener()
// 启动Http服务器,阻塞调用,如果希望并行执行其他任务,需要在单独的goroutine中启动服务器
err := httpServe.ListenAndServe()
if err != nil {
fmt.Printf("failed to start server: %v\n", err)
}
}
本文来自博客园,作者:linxx-,转载请注明原文链接:https://www.cnblogs.com/linxx-/p/18892276
浙公网安备 33010602011771号