registerHandlers.go   

 <代码>包的路由器
  
  导入(
  “. ./ctrl”
  “. ./函数”
  "github.com/julienschmidt/httprouter”
  "net/http”
  )
  
  middleWareHandler struct类型{
  r * httprouter.Router
  }
  
  func NewMiddleWareHandler (r * httprouter.Router) http。处理程序{
  m:=middleWareHandler {}
  m。r=返回米
  }
  
  func (m middleWareHandler) ServeHTTP http (w。ResponseWriter r * http.Request) {//检验合法性(会话)
  ok:=funcs.ValidateUser(右)
  如果好了==false {
  函数。职责(w 1”,请先登录”,nil)
  返回
  }
  m.r。ServeHTTP (w, r)
  }
  
  * httprouter func RegisterHandlers ()。路由器{
  路由器:=httprouter.New ()
  
  路由器。ServeFiles(“/资产/* filepath http.Dir(“资产”))//启动静态资源服务
  路由器。邮报》(“/user/登录”,ctrl.Login)//登陆
  路由器。邮报》(“/user/注册”,ctrl.Register)//注册
  路由器。邮报》(“/联系/加入朋友”,ctrl.AddFriend)//添加好友
  路由器。邮报》(“/联系/loadfriend”, ctrl.LoadFriend)//加载好友
  
  返回路由器
  } 
  

main.go   

 <代码>包主要
  
  导入(
  ”。/函数”
  ”。/路由器”
  “html/模板”
  “日志”
  "net/http”
  “运行时”
  )
  
  var (
  AllConf funcs.Confs
  犯错的错误
  tpl * template.Template//SessionManager * funcs.Manager
  )//函数init () {//SessionManager=funcs.Manager {}//}//循环渲染所有模版,路由方法
  func DisplayView () {
  被称为tpl,犯错=template.ParseGlob(“视图/* */*”)//错误则不必再继续
  如果犯错!=nil {
  log.Fatal (err.Error ())
  }
  _,v:=tpl.Templates范围(){
  tplName:=v.Name ()
  http。HandleFunc (tplName func(作家http。ResponseWriter,请求* http.Request) {
  tpl。ExecuteTemplate(作家,tplName, nil)
  })
  }
  }
  
  函数main () {//初始化配置
  如果AllConf,呃=funcs.InitConf (json);犯错!=nil {
  log.Fatal (err)
  }//初始化核心数
  runtime.GOMAXPROCS (runtime.NumCPU ())//初始化数据库//渲染模版//DisplayView ()//注册路由
  r:=router.RegisterHandlers ()
  mh:=router.NewMiddleWareHandler(右)
  错:=http。mh ListenAndServe (“80”)
  如果犯错!=nil {
  log.Fatal (err)
  }
  } 
  <人力资源/>   

还可以更灵活:
main.go

  
 <代码>包主要
  
  导入(
  ”。/函数”
  “html/模板”
  “日志”
  "net/http”
  “运行时”
  ”。/ctrl”
  )
  
  var (
  AllConf funcs.Confs
  犯错的错误
  tpl * template.Template//SessionManager * funcs.Manager
  )//函数init () {//SessionManager=funcs.Manager {}//}//循环渲染所有模版,路由方法
  func DisplayView () {
  被称为tpl,犯错=template.ParseGlob(“视图/* */*”)//错误则不必再继续
  如果犯错!=nil {
  log.Fatal (err.Error ())
  }
  _,v:=tpl.Templates范围(){
  tplName:=v.Name ()
  http。HandleFunc (tplName func(作家http。ResponseWriter,请求* http.Request) {
  tpl。ExecuteTemplate(作家,tplName, nil)
  })
  }
  }
  
  函数main () {//初始化配置
  如果AllConf,呃=funcs.InitConf (json);犯错!=nil {
  log.Fatal (err)
  }//初始化核心数
  runtime.GOMAXPROCS (runtime.NumCPU ())//初始化数据库
  
  http。处理(“/user/登录”,http.HandlerFunc (ctrl.Login))//登陆
  http。处理(“/user/注册”,http.HandlerFunc (ctrl.Register))//注册
  http。处理(“/联系/加入朋友”,funcs.AuthLogin (http.HandlerFunc (ctrl.AddFriend)))//添加好友
  http。处理(“/联系/loadfriend”, funcs.AuthLogin (http.HandlerFunc (ctrl.LoadFriend)))//加载好友
  
  错:=http。nil ListenAndServe (“80”)
  如果犯错!=nil {
  log.Fatal (err)
  }
  }
   
  

middleWare.go   

 <代码>包函数
  
  导入(
  “. ./def”
  “. ./模型/复述”
  “编码/json”
  "net/http”
  )//验证是否登陆
  func AuthLogin(下http.Handler) http。处理程序{
  返回http。http HandlerFunc (func (w。ResponseWriter r * http.Request) {//验证……
  
  })
  } 
  

ctrl/addFriend.go   

 ctrl <代码>包
  
  导入(
  “. ./函数”
  “. ./模式”
  “fmt”
  "net/http”
  “strconv”
  )
  
  var contactModel model.Contact
  
  func加入朋友(作家http。ResponseWriter,请求* http.Request) {
  
  fmt.Println(“加入朋友”)
  返回
  
  }