golang实现一个简单的webserver


官网DEMO

先上一个官网的示例
简单几行代码即可实现一个webserver

package main

import (
	"io"
	"log"
	"net/http"
)

func main() {
	// Hello world, the web server

	helloHandler := func(w http.ResponseWriter, req *http.Request) {
		io.WriteString(w, "Hello, world!\n")
	}

	http.HandleFunc("/hello", helloHandler)
	log.Fatal(http.ListenAndServe(":8080", nil))
}

进阶版

进阶版我们封装了以下功能

  • 用一个gin框架
  • 实现一个route
  • 实现controller
  • 实现一个中间件
  • 加一个单测
    代码如下
//main.go
package main

import (
	routes "api/routes"

	"github.com/gin-gonic/gin"
)

func main() {
	r := gin.Default()
	route := routes.Router(r)
	route.Run(":8080")
}

//单测示例,其实并没用
func hello() string {
	return "hello"
}
// routes/route.go
package routes

import (
	c "api/controller"
	m "api/middleware"

	"github.com/gin-gonic/gin"
)

func Router(r *gin.Engine) *gin.Engine {
    r.Use(m.SetHeader())
    //路由组,很方便
	v1 := r.Group("/v1")
	{
        //访问地址 http://hostname/v1/hello
		v1.GET("/hello", c.Hello)
	}
	return r
}
// controller/hello.go
package controller

import (
	"github.com/gin-gonic/gin"
)

type Hello struct {
	Text  string `json:"text"`
}

//golang 的方法首字母大写表示public修饰符
func Hello(c *gin.Context) {
	data := Hello{
        text: "hello word"
    }
    //返回json信息
	c.JSON(200, gin.H{
		"data": data,
	})
}
// middleware/header.go
package middleware

import (
	"github.com/gin-gonic/gin"
)

//简单的跨域中间件
func SetHeader() gin.HandlerFunc {
	return func(c *gin.Context) {
		// gin设置响应头,设置跨域
		c.Header("Access-Control-Allow-Origin", "*")
		c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
		c.Header("Access-Control-Allow-Headers", "Action, Module, X-PINGOTHER, Content-Type, Content-Disposition")
		c.Set("content-type", "application/json")
		c.Next()
	}
}
// main_test.go 单测示例
package main

import "testing"

func TestHello(t *testing.T) {
	if hello() != "hello" {
		t.Error("Testing error")
	}
}

好了,一个简单的webserver就搞定了
所有示例都是go module模式下的,不会的同学可以看我其他文章有介绍


文章作者: silfoxs
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 silfoxs !
评论