###goframe已有了模板的功能
{{"string"}} // 一般 string
{{`raw string`}} // 原始 string
{{'c'}} // byte
{{print nil}} // nil 也被支持
{{. | FuncA | FuncB | FuncC}}{{if .condition}}...
{{else}}{{if .condition2}}...{{end}}
{{end}}{{range $key, $value := .MapContent}}{{$key}}:{{$value}}
{{end}}{{include "模板文件名(需要带完整文件名后缀)" .}}{{/*
comment content
support new line
*/}}
删除空白符号
删除移除空格换行符# 使用{{-语法去除模板内容左侧的所有空白符号, 使用-}}去除模板内容右侧的所有空白符号。# 注意:-要紧挨{{和}},同时与模板值之间需要使用空格分隔。{{- .Name -}}
{{- range $key, $value := .list}}"{{$value}}"
{{- end}}
模版的选择
在https://sc.chinaz.com/moban/找到喜欢的模板
前台模版:https://sc.chinaz.com/mobandemo.aspx?downloadid=19202411041264
后台模版:https://sc.chinaz.com/mobandemo.aspx?downloadid=1202491158443
本文是为了开发传统的界面,以利于SEO,而不是开发vue react,进行完全的前后端分离。
将静态文放到其需的地方。
在resource 的template存放到相关的目录,front 前端, admin 后台。
在开发过程中发现前端过于繁杂,又换了一个,大家以后可以去下载。
路由及controller的开发
在api/admin中加入login.go,来定义一下API接口定义,包含请求/响应结构体
// 定义包名为 admin,表示这是管理后台相关的 API
package adminimport ("context" // 用于处理上下文"github.com/gogf/gf/v2/frame/g" // GoFrame 框架的核心包
)// LoginReq 登录请求结构体
type LoginReq struct {// g.Meta 是 GoFrame 的路由元数据,使用结构体标签定义路由信息g.Meta `path:"/login" // 路由路径为 /logintags:"Hello" // Swagger 文档标签method:"get" // HTTP 请求方法为 GETsummary:"You first hello api"` // API 描述
}
// LoginRes 登录响应结构体
type LoginRes struct {// 可以在这里添加需要返回的字段// 例如:// Token string `json:"token" dc:"登录令牌"`// UserInfo map[string]interface{} `json:"userInfo" dc:"用户信息"`
}// LogoutReq 登出请求结构体
type LogoutReq struct {g.Meta `path:"/logout" // 路由路径为 /logouttags:"Hello" // Swagger 文档标签method:"post" // HTTP 请求方法为 POSTsummary:"Admin logout api"` // API 描述
}
// LogoutRes 登出响应结构体
type LogoutRes struct {// 可以在这里添加需要返回的字段// 例如:// Message string `json:"message" dc:"退出信息"`
}// ILogin 定义登录模块的接口
type ILogin interface {// Login 处理登录请求// ctx: 上下文,用于处理请求的整个生命周期// req: 登录请求参数// 返回值:// - res: 登录响应// - err: 错误信息Login(ctx context.Context, req *LoginReq) (res *LoginRes, err error)// Logout 处理登出请求// ctx: 上下文// req: 登出请求参数// 返回值:// - res: 登出响应// - err: 错误信息Logout(ctx context.Context, req *LogoutReq) (res *LogoutRes, err error)
}
以上代码为了注解修改了格式不能直接使用
package adminimport ("context""github.com/gogf/gf/v2/frame/g"
)type LoginReq struct {g.Meta `path:"/login" tags:"Hello" method:"get" summary:"You first hello api"`
}
type LoginRes struct {
}type LogoutReq struct {g.Meta `path:"/logout" tags:"Hello" method:"post" summary:"Admin logout api"`
}
type LogoutRes struct {
}type ILogin interface {Login(ctx context.Context, req *LoginReq) (res *LoginRes, err error)Logout(ctx context.Context, req *LogoutReq) (res *LogoutRes, err error)
}
的internal 中的admin加入一个controller ,如下代码
// Package admin 提供后台管理相关的控制器
// Package admin 提供后台管理相关的控制器
package adminimport ("context""web/api/admin""github.com/gogf/gf/v2/frame/g"
)// 实现登录控制器
type Controller struct{}// New 创建一个新的登录控制器实例
func New() admin.ILogin {return &Controller{}
}// Login 处理管理员登录请求
// ctx: 上下文
// req: 登录请求参数
// 返回登录响应和可能的错误
func (c *Controller) Login(ctx context.Context, req *admin.LoginReq) (res *admin.LoginRes, err error) {g.RequestFromCtx(ctx).Response.Writeln("Login !")return
}
func (c *Controller) Logout(ctx context.Context, req *admin.LogoutReq) (res *admin.LogoutRes, err error) {g.RequestFromCtx(ctx).Response.Writeln("Logout success!")return
}
在入口文件cmd.go注册路由
package cmdimport ("context""github.com/gogf/gf/v2/frame/g""github.com/gogf/gf/v2/net/ghttp""github.com/gogf/gf/v2/os/gcmd""github.com/gogf/gf/v2/os/gctx""github.com/gogf/gf/v2/os/gsession""web/internal/controller/admin")var (Main = gcmd.Command{Name: "main",Usage: "main",Brief: "start http server",Func: func(ctx context.Context, parser *gcmd.Parser) (err error) {s := g.Server() // 创建服务器实例// 配置管理后台路由组s.Group("/admin", func(group *ghttp.RouterGroup) {// 注册响应处理中间件group.Middleware(ghttp.MiddlewareHandlerResponse)// 绑定后台控制器group.Bind(admin.New(), // 注册管理后台控制器)})s.Run() // 启动服务器return nil},}
)
运行可以看到效果!!!