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)
    }
}
posted @ 2025-05-23 00:28  linxx-  阅读(13)  评论(0)    收藏  举报