服务计算——web程序开发与Go源码

源代码:https://github.com/kotomineshiki/WebServerOfGo

处理 web 程序的输入与输出
要求:

  1. 支持静态文件服务
  2. 支持简单 js 访问
  3. 提交表单,并输出一个表格
  4. 对 /unknown 给出开发中的提示,返回码 5xx

支持静态文件服务在这里插入图片描述

在这里插入图片描述

支持简单 js 访问

这是一个简单的计算器web程序

在这里插入图片描述

对 /unknown 给出开发中的提示,返回码 5xx

在这里插入图片描述

表单的存储及释放

在这里插入图片描述

在这里插入图片描述

http包源代码解析(注释)

func NewServer() *negroni.Negroni {//copy自案例
   formatter := render.New()//创建新的render实例
   n := negroni.Classic()//标明是标准Negroni实例,有着默认的中间件
   mx := mux.NewRouter()//创建router实例
   initRoutes(mx, formatter)
   n.UseHandler(mx)//添加一个httphandler到中间件的栈中。 handler按照添加顺序被激发
   return n
}

func initRoutes(mx *mux.Router, formatter *render.Render) {
   webRoot := os.Getenv("WEBROOT")//获取环境(根目录)
   if len(webRoot) == 0 {
      if root, err := os.Getwd(); err != nil {
         panic("Could not retrive working directory")
      } else {
         webRoot = root
      }
   }
   mx.HandleFunc("/unknown", unknownPage).Methods("GET")
   //HandleFunc登记了一个url匹配器
   mx.HandleFunc("/", indexPage).Methods("GET")
   //Methods 匹配http方法。
   mx.HandleFunc("/index", indexPage).Methods("GET")
   mx.HandleFunc("/calculator", calculatorPage).Methods("GET")
   mx.HandleFunc("/", submit).Methods("POST")
   mx.PathPrefix("/file").Handler(http.StripPrefix("/file/", http.FileServer(http.Dir(webRoot+"/assets/"))))//这个是用来匹配前缀的,比如/foobar/会被匹配为/foo
//而stripprefix 返回去除了前缀之后的部分
//FileServer返回一个handler及该位置上的内容,即静态文件
}

下面好几个文件写法比较雷同,挑代表性的讲解

package service
import (
   "html/template"
   "net/http"
)
func calculatorPage(w http.ResponseWriter, req *http.Request) {
   page := template.Must(template.ParseFiles("templates/calculator.html"))
   //Must是用来防止出错的。如果must参数是nil ,就会panic
   //ParseFiles创建一个新的模板,并从名字解析定义
   
   page.Execute(w, nil)
   //execute函数使用解析过的文件,输出到屏幕
   
}
func unknownPage(reqw http.ResponseWriter, req *http.Request) {
   http.Error(reqw, "504 Not Implemented!", 504)//返回报错信息
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值